2017-12-21 20 views
0

重複をチェックしているところでこのコードを持っていますが、重複していればisDuplicateブール値ですが、コードを拡張してcolorIdでsetBiggerプロパティ、より大きなもののために: いくつかの提案がありますか? はここにそんなにangularjs重複を確認して大きな重複を設定する

に感謝私のコードです:

$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

このソリューションを見て真実であります元のコードチェックと名前の重複を組み合わせることはできますか? –

1

メイクの使用は

を特徴とisBiggerプロパティを割り当てるまずbiggerColorIdオブジェクトを見つける

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))

関連する問題