2017-12-21 6 views
0

중복이 있는지 확인하기 위해이 코드를 사용합니다. 중복되는 경우 isDuplicate 부울을 가지고 있지만 코드를 확장하고 colorId이며 setBigger 속성을 가진 다른 속성을 비교하려고합니다. 큰 쪽 : 몇 가지 제안 사항이 있으십니까? 는 너무 여기 angularjs duplicate를 확인하고 더 큰 중복을 설정하십시오

내 코드입니다 감사합니다 :

$scope.verifyDuplicate = function() { 
    var names = [{ 
    "order": 1, 
    "name": "a", 
    "shortName": "a", 
    "isDuplicate": false, 
    "categoryId": 15070, 
    "colorId": 50 
    }, { 
    "order": 2, 
    "name": "s", 
    "shortName": "s", 
    "categoryId": 15071, 
    "colorId": 51 
    }, { 
    "order": 3, 
    "name": "h", 
    "shortName": "g", 
    "focused": 1513262627570, 
    "isDuplicate": true, 
    "categoryId": 15074, 
    "colorId": 54 
    }, { 
    "order": 4, 
    "name": "h", 
    "shortName": "h", 
    "isDuplicate": true, 
    "categoryId": 15075, 
    "colorId": 59 
    }]; 
    var sorted, i; 

    sorted = names.concat().sort(function(a, b) { 
    if (a.name > b.name) 
     return 1; 
    if (a.name < b.name) 
     return -1; 
    return 0; 
    }); 
    for (i = 0; i < names.length; i++) { 
    if (sorted[i].name !== '') { 
     sorted[i].isDuplicate = ((sorted[i - 1] && sorted[i - 1].name === sorted[i].name)) || ((sorted[i + 1] && sorted[i + 1].name === sorted[i].name)); 
    } 
    } 
}; 

답변

1

당신은 아래의 기능을 사용하는 키의 기준으로 객체의 배열을 정렬하는 일반 기능을 도입 할 수 있습니다 -

$scope.sortByKey = function(array, key) { 
 
    return array.sort(function(a, b) { 
 
     var x = a[key]; var y = b[key]; 
 
     return ((x > y) ? -1 : ((x < y) ? 1 : 0)); 
 
    }); 
 
};

이 기능을 사용하면 임의의 키와 기준에 따라 개체 배열을 정렬 할 수 있습니다 "isLargest"속성이 true로 설정됩니다. 아래 코드 스 니펫을 확인할 수 있습니다. ES6의

$scope.verifyDuplicate = function() { 
 
    var names = [{ 
 
    "order": 1, 
 
    "name": "a", 
 
    "shortName": "a", 
 
    "isDuplicate": false, 
 
    "categoryId": 15070, 
 
    "colorId": 50 
 
    }, { 
 
    "order": 2, 
 
    "name": "s", 
 
    "shortName": "s", 
 
    "categoryId": 15071, 
 
    "colorId": 51 
 
    }, { 
 
    "order": 3, 
 
    "name": "h", 
 
    "shortName": "g", 
 
    "focused": 1513262627570, 
 
    "isDuplicate": true, 
 
    "categoryId": 15074, 
 
    "colorId": 54 
 
    }, { 
 
    "order": 4, 
 
    "name": "h", 
 
    "shortName": "h", 
 
    "isDuplicate": true, 
 
    "categoryId": 15075, 
 
    "colorId": 59 
 
    }]; 
 
    
 
    var sorted; 
 
    sorted = $scope.sortByKey(names , "colorId"); 
 
    
 
    //To check if the multiple object has largest value 
 
    for(var i = 0; i< sorted.length;i++){ 
 
    if(sorted[i] === sorted[0]) sorted[i]["isLargestColorId"] = true; 
 
    else break; 
 
    } 
 
    
 
};

+0

이 솔루션 보면 참 지정 첫 번째 개체 biggerColorId 기능 괜찮아요.하지만 중복 된 이름을 원래 코드 검사와 결합 할 수 있습니까? –

1

만들기 사용

발견 후 isBigger이 속성은

var names = [{ 
 
    "order": 1, 
 
    "name": "a", 
 
    "shortName": "a", 
 
    "isDuplicate": false, 
 
    "categoryId": 15070, 
 
    "colorId": 50 
 
    }, { 
 
    "order": 2, 
 
    "name": "s", 
 
    "shortName": "s", 
 
    "categoryId": 15071, 
 
    "colorId": 51 
 
    }, { 
 
    "order": 3, 
 
    "name": "h", 
 
    "shortName": "g", 
 
    "focused": 1513262627570, 
 
    "isDuplicate": true, 
 
    "categoryId": 15074, 
 
    "colorId": 54 
 
    }, { 
 
    "order": 4, 
 
    "name": "h", 
 
    "shortName": "h", 
 
    "isDuplicate": true, 
 
    "categoryId": 15075, 
 
    "colorId": 59 
 
    }]; 
 

 
var biggerColorId = Math.max.apply(Math,names.map(function(o){return o.colorId;})) 
 

 
var objOfBiggerColorId = names.find(function(o){ return o.colorId == biggerColorId; }) 
 

 
objOfBiggerColorId.isBigger = true; //set isbigger property true for biggerColorId 
 

 
// alert(JSON.stringify(objOfBiggerColorId)) 
 
console.log('objOfBiggerColorId ' + JSON.stringify(objOfBiggerColorId)) 
 

 

 
// alert(JSON.stringify(names)) 
 
console.log('names ' + JSON.stringify(names))

관련 문제