JavaScript 數(shù)組去重

博客地址:https://ainyi.com/#/32

單數(shù)組去重

  1. filter + indexOf()
let arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0, 2, 2, 3];
function unique (arr) {
  return arr.filter((item, index, array) =>  array.indexOf(item) === index);
}
console.log(unique(arr)); // [1, "a", "b", "d", "e", 0, 2, 3]
  1. filter + Map()
    Map() 對(duì)象的 has 方法是:如果映射包含指定元素,則返回 true,檢測(cè)的是key值
let arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0, 2, 2, 3];
function unique(arr){
  const seen = new Map();
  return arr.filter((item) => !seen.has(item) && seen.set(item, 1));
}
console.log(unique(arr)); // [1, "a", "b", "d", "e", 0, 2, 3]
  1. forEach + indexOf() + 新數(shù)組
let arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0, 2, 2, 3];
function unique(arr){
  let newArr = [];
  arr.forEach((item, index, array) => {
    if(array.indexOf(item) === index) {
      newArr.push(item);
    }
  });
  return newArr;
}
console.log(unique(arr)); // [1, "a", "b", "d", "e", 0, 2, 3]
  1. Set() + Array.from
let arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0, 2, 2, 3];
function unique(arr){
  return Array.from(new Set(arr));
}
console.log(unique(arr)); // [1, "a", "b", "d", "e", 0, 2, 3]
  1. Set() + [...()]
let arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0, 2, 2, 3];
function unique(arr){
  return [...(new Set(arr))];
}
console.log(unique(arr)); // [1, "a", "b", "d", "e", 0, 2, 3]
  1. reduce + includes()
let arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0, 2, 2, 3];
function unique(arr){
  return arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev,cur],[]);
}
console.log(unique(arr)); // [1, "a", "b", "d", "e", 0, 2, 3]
  1. for循環(huán)(一次) + sort()排序 + 新數(shù)組
    自動(dòng)排好序
let arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0, 2, 2, 3];
function unique(arr){
  arr.sort();
  let newArr = [arr[0]];
  for(let i = 1; i < arr.length; i++){
    if(arr[i] !== newArr[newArr.length - 1]){
      newArr.push(arr[i]);
    }
  }
  return newArr;
}
console.log(unique(arr)); // [0, 1, 2, 3, "a", "b", "d", "e"]
  1. 兩次for循環(huán)(不推薦)
let arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0, 2, 2, 3];
function unique (arr) {
  let newArr = [arr[0]];
  for(let i = 1; i < arr.length; i++){
    let flag = false;
    for(var j = 0; j < newArr.length; j++){
      if(arr[i] == newArr[j]){
        flag = true;
        break;
      }
    }
    if(!flag){
      newArr.push(arr[i]);
    }
  }
  return newArr;
}
console.log(unique(arr)); // [1, "a", "b", "d", "e", 0, 2, 3]

兩個(gè)數(shù)組去重的問(wèn)題

(一個(gè)數(shù)組包含于另一個(gè)數(shù)組中)

a = [1,2,3,4,5,6,7,8]; b = [2,5,8];

需要在數(shù)組 a 中過(guò)濾掉 b 中出現(xiàn)的元素

該問(wèn)題在實(shí)際項(xiàng)目中經(jīng)常出現(xiàn)

解決方案有很多,可以是兩個(gè) for 循環(huán),或者一個(gè) for 和 一個(gè) filter,一個(gè) filter 和 一個(gè) every,接下來(lái)介紹這幾種方法:

let originArr = [1,2,3,4,5,6,7,8,9];
let filterArr = [2,4,6,7];

// 推薦,filter + every
let result = originArr.filter( item1 => {
  return filterArr.every( item2 => item2 !== item1);
}); // 1 3 5 8 9

// for + filter
let result = originArr;
for (let val of filterArr) {
  result = result.filter(item => item !== val);
} // 1 3 5 8 9

有關(guān)數(shù)組的操作方法見(jiàn):https://ainyi.com/#/12

博客地址:https://ainyi.com/#/32

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容