可能重复:
Remove duplicates from an array of objects in javascript
var arr = [{empID:100,empName:greg},{empID:101,empName:Math},{empID:100,empName:greg}];
var sorted_arr = arr.sort(); // You can define the comparing function here.
// JS by default uses a crappy string compare.
var results = [];
for (var i = 0; i < arr.length - 1; i++) {
if (sorted_arr[i + 1].empID != sorted_arr[i].empID) {
results.push(sorted_arr[i]);
}
}
alert(results);
我有一个对象数组,但是当我尝试删除与ID匹配的重复对象时,它不会被删除。代码有什么问题。
答案 0 :(得分:13)
您的代码有两个问题:
我建议采用以下替代方案:
var arr = ...;
arr.sort( function( a, b){ return a.empID - b.empID; } );
// delete all duplicates from the array
for( var i=0; i<arr.length-1; i++ ) {
if ( arr[i].empID == arr[i+1].empID ) {
delete arr[i];
}
}
// remove the "undefined entries"
arr = arr.filter( function( el ){ return (typeof el !== "undefined"); } );
答案 1 :(得分:6)
如果保证empID
是一个字符串或数字,我会跳过排序步骤并使用一个对象作为已经看过的ID的哈希:
var arr = [
{empID:100,empName:"greg"},
{empID:101,empName:Math},
{empID:100,empName:"greg"}
];
var results = [];
var idsSeen = {}, idSeenValue = {};
for (var i = 0, len = arr.length, id; i < len; ++i) {
id = arr[i].empID;
if (idsSeen[id] !== idSeenValue) {
results.push(arr[i]);
idsSeen[id] = idSeenValue;
}
}
答案 2 :(得分:1)
如果您要比较项sort
n and n+1
函数应该使用比较器
var sorted_arr = arr.sort(function(a,b) { return a.empID - b.empID; } );
通过这种方式,您可以确保列表中的顺序项可能具有重复的empID
属性。