鍍金池/ 問答/HTML/ 請問如何刪除數(shù)組中只要出現(xiàn)重復(fù)的元素就刪除

請問如何刪除數(shù)組中只要出現(xiàn)重復(fù)的元素就刪除

clipboard.png

比如這三條數(shù)據(jù)重復(fù),那就刪除全部重復(fù)的,只留0,1數(shù)組

回答
編輯回答
熟稔

思路 代碼就不寫了

去重把 把去重的元素拿出來 然后去遍歷數(shù)據(jù) 刪除去重的元素 也就是重復(fù)的元素

2017年8月2日 23:23
編輯回答
不將就

思路:計數(shù)+過濾

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)
2017年8月16日 18:11
編輯回答
野橘

支持es6么,可以看看set()

2018年6月3日 01:57
編輯回答
枕頭人

沒細(xì)看問題,如果要刪除所有的重復(fù)的數(shù)據(jù)答案為

本題方案

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

非本題答案,數(shù)組去重方案

ES6可以用set

result = Array.from(new Set(arr));

另外也可以使用filter去重。

  result = arr.filter(function(item, pos,self) {
    return self.indexOf(item) == pos;
  });

如果數(shù)據(jù)量大使用Array.indexOf效率就相對低點

可以參考:JavaScript刪除數(shù)組里重復(fù)的元素

2018年6月14日 16:20
編輯回答
孤客

用indexOf()

2017年5月19日 19:03
編輯回答
綰青絲

空間復(fù)雜度 n
時間復(fù)雜度 n
去重的話前半部分是去重后半部分是過濾重復(fù)元素自身也刪除

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"));
2017年2月12日 08:25
編輯回答
夏夕

能用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)
2017年1月27日 02:57
編輯回答
舊城人
                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();
2017年12月22日 17:48
編輯回答
放開她
(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;
}
2017年11月15日 10:40
編輯回答
拮據(jù)
var a = [{material_id : '29', name : '點塑布'}, {material_id : '14', name : '沙發(fā)布'}, {material_id : '54'}, {material_id : '51'}, {material_id : '53'}, {material_id : '54'}, {material_id : '53'}, {material_id : '51'}],
n = a.reduce(function(p, n) {
  return p.push(n.material_id), p;
}, []).filter(function(e, i, a) {
  return a.indexOf(e) !== i;
}),
m = a.filter(function(e) {
  return n.indexOf(e.material_id) === -1;
});
alert(JSON.stringify(m)); // [{material_id : '29', name : '點塑布'}, {material_id : '14', name : '沙發(fā)布'}]
2017年6月24日 12:02