用一行Array.filter去重JS陣列

weixin_33860553發表於2017-06-27

最近在freeCodeCamp上練手js演算法題,發現有很多題目可以直接return一個鏈式呼叫的物件完成,恰巧趕上熟悉了filter方法,特此介紹
法一:

[需要去重的陣列].filter( (item, index ,arr)=>arr.indexOf(item) === index )

意思是,對於重複的元素 傳入indexOf方法,輸出的是陣列中第一次出現的下標而非它本身的下標,效果:

3132311-62400e2a7e3fe198.png
控制檯測試

filter函式介紹:
  filter是Array的原型方法,filter接受一個函式,函式可以傳3個引數:分別是遍歷到的元素物件,前者的下表和陣列本身,如果函式返回真,就把該元素加到新陣列中,遍歷完成後,filter返回一個包含遍歷是碰到每個return true對應元素的陣列;
示例:

var array = [1,2,3,4,5,6,7,8,9];
var newArray = array.filter(function(item){
  return item % 2 === 0;//保留偶數
});
console.log(newArray)//[2,4,6,8]
console.log(array)//不會改變原陣列

法二,ES6中使用Set資料結構和...擴充運算子可以更加簡潔地達到這個效果
[...new Set([1,1,1,1,1,2,3,3,3,3,3])] //[1,2,3]

相關文章