第一種: 利用Map對(duì)象和數(shù)組的filter方法
1.Map對(duì)象是ES6提供的一個(gè)新的數(shù)據(jù)結(jié)構(gòu)迂求,其中has的辦法是返回一個(gè)布爾值窜醉,表示某個(gè)值是否存在當(dāng)前的Mp對(duì)象之中采转,set的辦法是給Map對(duì)象設(shè)置key/value斥季。
2.filter() 方法創(chuàng)建一個(gè)新的數(shù)組,新數(shù)組中的元素是通過(guò)檢查指定數(shù)組中符合條件的所有元素痹升。
所以說(shuō)沈自,Map對(duì)象結(jié)合filter方法可以達(dá)到數(shù)組去重的效果
let arr = [1, 1, 1, 2, 3, 3, 4, 5, 5, ];
function netArr(arr) {
const db = new Map();
return arr.filter((val) => !db.has(val) && db.set(val, 1))
}
let arr2 = netArr(arr);
console.log(arr2) //[1, 2, 3, 4, 5]
第二種:利用Set對(duì)象和數(shù)組的Array.from方法
1.Set是ES6新提供的數(shù)據(jù)結(jié)構(gòu)毡代,Set集合劫拗,沒(méi)有重復(fù)元素的集合
2.Array.from方法用于將兩類對(duì)象轉(zhuǎn)為真正的數(shù)組:類似數(shù)組的對(duì)象(array-like object)和可遍歷(iterable)的對(duì)象(包括 ES6 新增的數(shù)據(jù)結(jié)構(gòu) Set 和 Map)间校。
所以set結(jié)合Array.from同樣可以達(dá)到數(shù)組去重的效果。但需要注意:主流瀏覽器像Chrome,Firfox,Opera页慷,Safari憔足,包括微軟的Edge,都是支持的,但是唯獨(dú)IE系列不支持酒繁。
let arr = [1, 1, 1, 2, 3, 3, 4, 5, 5, NaN, NaN, NaN, ];
console.log(Array.from(new Set(arr))) //[1, 2, 3, 4, 5, NaN]
第三種:利用Set+擴(kuò)展運(yùn)算符
1.Set是ES6新提供的數(shù)據(jù)結(jié)構(gòu)四瘫,Set集合,沒(méi)有重復(fù)元素的集合
let arr = [1, 1, 1, 2, 3, 3, 4, 5, 5, NaN, NaN, NaN, ];
console.log([...new Set(arr)])//[1, 2, 3, 4, 5, NaN]
第四種:有時(shí)候還需對(duì)數(shù)組對(duì)象進(jìn)行去重欲逃。那么這個(gè)辦法就很實(shí)用.
1.利用reduce數(shù)組:arr.reduce(callback,[initialValue])
reduce() 方法接收一個(gè)函數(shù)作為累加器,數(shù)組中的每個(gè)值(從左到右)開(kāi)始縮減饼暑,最終計(jì)算為一個(gè)值稳析。
reduce() 可以作為一個(gè)高階函數(shù),用于函數(shù)的 compose弓叛。
注意: reduce() 對(duì)于空數(shù)組是不會(huì)執(zhí)行回調(diào)函數(shù)的彰居。
var obj = [{ id: 0,val: 'daisy',}, { id: 1,val: 'jack',}, {id: 2,val: 'rose',}, {id: 3,val: 'daisy',}, {id: 4,val: 'rose',}];
var objFun = function() {
const db = {}
this.obj = this.obj.reduce((currentValue, array) => {
db[array.val] ? '' : db[array.val] = true && currentValue.push(array);
return currentValue;
}, [])
return this.obj
};
console.log(objFun())