比如这三条数据重复,那就删除全部重复的,只留0,1数组
没细看问题,如果要删除所有的重复的数据答案为
本题方案
var array = ...; counts = {}; l = array.length;
array.forEach(function(item) {
counts[item.id] = (counts[item.id] || 0) + 1;
})
array.filter(function(item) {
return counts[item.id] == 1;
})
非本题答案,数组去重方案
ES6可以用set
result = Array.from(new Set(arr));
另外也可以使用filter去重。
result = arr.filter(function(item, pos,self) {
return self.indexOf(item) == pos;
});
如果数据量大使用Array.indexOf效率就相对低点
可以参考:JavaScript删除数组里重复的元素
能用es6 可以试试set(),不能的话就老老实实地去重。
js很好写
var xxx=[1,2,3,9,4,5,7,1,3,4];
var res =[];
for(var i= 0; i<xxx.length;i++){
var d = res.indexOf(xxx[i])
if(d == -1){
res[i] = xxx[i]
}
}
console.log(res)
空间复杂度 n
时间复杂度 n
去重的话前半部分是去重后半部分是过滤重复元素自身也删除
function unique(nums,key) {
var obj = {};
var index = 0;
for (var i = 0, len = nums.length; i < len; i++) {
if (!obj[nums[i][key]]) {
obj[nums[i][key]] = 1;
nums[index++] = nums[i]
} else {
obj[nums[i][key]] = obj[nums[i][key]] + 1;
}
}
var index2 = 0;
for (var i = 0; i < index; i++) {
if (obj[nums[i][key]] === 1) {
nums[index2++] = nums[i]
}
}
nums.length = index2;
return index2;
}
console.log(unique(arr,"material_id"));
(array) => {
const newArr = [];
for(let i = 0, len = array.length; i< len; i++) {
if (newArr.indexOf(array[i]) === -1) {
newArr.push(array[i]);
}
}
return newArr;
}
var arr=res.data.results;
Array.prototype.removeRepeatAttr=function(){
var tmp={},a=this.slice();
for(var i=j=0;i<a.length;i++){
if(!tmp[a[i].adpinfo.adptitle]){
tmp[a[i].adpinfo.adptitle]=!0;
j++;
}else{
this.splice(j,1);
}
};
}
arr.removeRepeatAttr();
思路:计数+过滤
const counts = arr.reduce((m, x) => (m[x.material_id] = (m[x.material_id] || 0) + 1, m), {})
const newArr = arr.filter(x => counts[x.material_id] === 1)
13 回答12.7k 阅读
7 回答1.8k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
6 回答775 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决