Delete duplicate elements from Array in Javascript
本问题已经有最佳答案,请猛点这里访问。
我有一个带有obejcts电子邮件和id的数组,所以我想删除具有类似id的重复元素。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | var newarray=[ { Email:"[email protected]", ID:"A" }, { Email:"[email protected]", ID:"B" }, { Email:"[email protected]", ID:"A" }, { Email:"[email protected]", ID:"C" }, { Email:"[email protected]", ID:"C" } ]; |
现在我需要删除重复的元素,这些元素的ID是常见的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var FinalArray=[ { Email:"[email protected]", ID:"A" }, { Email:"[email protected]", ID:"B" }, { Email:"[email protected]", ID:"C" } ]; |
使用array.prototype.filter过滤元素并检查重复项使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | var newarray = [{ Email:"[email protected]", ID:"A" }, { Email:"[email protected]", ID:"B" }, { Email:"[email protected]", ID:"A" }, { Email:"[email protected]", ID:"C" }, { Email:"[email protected]", ID:"C" }]; // Array to keep track of duplicates var dups = []; var arr = newarray.filter(function(el) { // If it is not a duplicate, return true if (dups.indexOf(el.ID) == -1) { dups.push(el.ID); return true; } return false; }); console.log(arr); |
你可以用哈希表过滤它。
1 2 3 4 5 6 7 8 9 | var newarray = [{ Email:"[email protected]", ID:"A" }, { Email:"[email protected]", ID:"B" }, { Email:"[email protected]", ID:"A" }, { Email:"[email protected]", ID:"C" }, { Email:"[email protected]", ID:"C" }], filtered = newarray.filter(function (a) { if (!this[a.ID]) { this[a.ID] = true; return true; } }, Object.create(null)); console.log(filtered); |
1 | .as-console-wrapper { max-height: 100% !important; top: 0; } |
ES6与
1 2 3 4 | var newarray = [{ Email:"[email protected]", ID:"A" }, { Email:"[email protected]", ID:"B" }, { Email:"[email protected]", ID:"A" }, { Email:"[email protected]", ID:"C" }, { Email:"[email protected]", ID:"C" }], filtered = newarray.filter((s => a => !s.has(a.ID) && s.add(a.ID))(new Set)); console.log(filtered); |
1 | .as-console-wrapper { max-height: 100% !important; top: 0; } |
如果您可以使用诸如下划线或lodash之类的javascript库,我建议您查看它们库中的.uniq函数。来自Loase:
1 | _.uniq(array, [isSorted=false], [callback=_.identity], [thisArg]) |
这里你必须像下面那样使用,
1 | var non_duplidated_data = _.uniq(newarray, 'ID'); |
另一种使用
1 2 3 4 5 6 7 8 9 10 | var newarray=[ { Email:"[email protected]", ID:"A" }, { Email:"[email protected]", ID:"B" }, { Email:"[email protected]", ID:"A" }, { Email:"[email protected]", ID:"C" }, { Email:"[email protected]", ID:"C" } ]; var result = newarray.reduce(function(hash){ return function(prev,curr){ !hash[curr.ID] && (hash[curr.ID]=prev.push(curr)); return prev; }; }(Object.create(null)),[]); console.log(result); |
1 | .as-console-wrapper{top:0;max-height:100%!important;} |