數組去重方法
html
簡單數組去重:segmentfault
{ const a = [1, 3, 4, 1, 5, 2, 6, 7, 8, 3] const b = a.filter((item, index, self) => self.indexOf(item) === index) console.log(b) //[1, 3, 4, 5, 2, 6, 7, 8] }
實例1根據indexOf去重,indexOf的好處就是返回的是首次出現的位置,這樣後面即便出現的值同樣,也只能返回第一次出現的索引,固然這個只適用於簡單的數組數組
對象數組去重:code
const objArr = [{ name: '名稱1' },{ name: '名稱2' },{ name: '名稱3' },{ name: '名稱1' },{ name: '名稱2' }] const obj = {} const newObjArr = [] for(let i = 0; i < objArr.length; i++){ if(!obj[objArr[i].name]){ newObjArr.push(objArr[i]); obj[objArr[i].name] = true } } console.log(newObjArr)
結果爲:htm
[{ name: '名稱1' },{ name: '名稱2' },{ name: '名稱3' }]
還能夠用reduce來處理,以下:對象
const objArr = [{ name: '名稱1' },{ name: '名稱2' },{ name: '名稱3' },{ name: '名稱1' },{ name: '名稱2' }] const obj = {} const newObjArr = objArr.reduce((prev, curr)=>{ obj[curr.name] ? true : obj[curr.name] = true && prev.push(curr); return prev }, []) console.log(newObjArr)
結果爲:索引
[{ name: '名稱1' },{ name: '名稱2' },{ name: '名稱3' }]
兩個數組之間去重:get
var arr3 = [{ id: 1, name: 'lily' }, { id: 2, name: 'hz' }, { id: 3, name: '123' }, { id: 4, name: '321' }, { id: 5, name: 'aa' }] var other = [{ id: 1, name: 'lily' }, { id: 2, name: 'hz' }] isOther = (x, arr) =>{ for(var i = 0;i<arr.length;i++){ if(x === arr[i].id){ return true; } } return false; } console.log(arr3.filter((item)=>!isOther(item.id, other)));
結果爲:it
[{ id: 3, name: '123' }, { id: 4, name: '321' }, { id: 5, name: 'aa' }]
上面例子中,在數組arr3去除掉跟數組isOther中相同的元素,把不存在在isOther數組中的元素篩選出來console