2017-12-14 9 views
0

重複しているかどうかをチェックしていますが、重複していればisDuplicateブール値ですが、プロパティで、数値であり、大きなものに対してはisBiggerプロパティを設定します:) いくつか提案がありますか? はあなたをとても感謝json属性の値が重複している場合は、別の数値プロパティと属性を比較して大きな値を設定するbiggerDuplicate

がここに私のコードです:

$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

私は一種の一環として、あなたの番号を追加することでこれを行うだろう。私はそれだと仮定しますcolorID

ここでnameがキーとして使用され、値はその名前のオブジェクトの文字列です。

そして、これらの各グループをループとは、あなたの特性

let sorted = names.sort(function(a, b) { 
 
    // if names are same sort by colorId 
 
    return a.name.localeCompare(b.name) || a.colorId > b.colorId 
 
}); 
 

 
let tmp = sorted.reduce(function(a, c) { 
 
    a[c.name] = a[c.name] || []; 
 
    a[c.name].push(c); 
 
    return a; 
 
}, {}); 
 

 
Object.values(tmp).forEach(function(arr) { 
 
    let len = arr.length, 
 
    isDuplicate = len > 1;// if more than one in group they are all duplicates 
 
    arr.forEach(function(o, i) { 
 
    o.isDuplicate = isDuplicate; 
 
    if (isDuplicate) { 
 
     o.isBigger = i === len - 1;// already sorted by colorId so last one is biggest 
 
    } 
 
    }); 
 
}); 
 
console.log(sorted)
.as-console-wrapper {max-height: 100%!important;}
<script> 
 
var names = [{ 
 
    "order": 1, 
 
    "name": "a", 
 
    "shortName": "a",  
 
    "categoryId": 15070, 
 
    "colorId": 50 
 
    }, { 
 
    "order": 2, 
 
    "name": "s", 
 
    "shortName": "s", 
 
    "categoryId": 15071, 
 
    "colorId": 51 
 
    }, { 
 
    "order": 3, 
 
    "name": "h", 
 
    "shortName": "g", 
 
    "focused": 1513262627570, 
 
    "categoryId": 15074, 
 
    "colorId": 54 
 
    }, { 
 
    "order": 4, 
 
    "name": "h", 
 
    "shortName": "h", 
 
    
 
    "categoryId": 15075, 
 
    "colorId": 59 
 
    }]; 
 
</script>
設定

+0

Charlietfl:ありがとう、しかしObject.valuesはIE上で動作していない:/ –

+0

は '中のために使用することができます'ループするか、ポリフィルを検索する – charlietfl

関連する問題