数组去重方法集合

2021-02-20  本文已影响0人  转移到CSDN名字丹丹的小跟班
1.for循环 + indexOf() + push()
function goRepeat(arr) {
  let newArr = [];
  for (var i = 0; i < arr.length; i++) {
    //将数组的每一项与新数组进行indexOf查询,若没有则添加进新数组,若有则不管
    if (newArr.indexOf(arr[i]) == -1) {
      //不包含该值则返回-1
      newArr.push(arr[i]);
    }
  }
  return newArr
}
2. for循环 + indexOf() + push()
function goRepeat(arr) {
  let newArr = [];
  for (var i = 0; i < arr.length; i++) {
    //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
    //那么表示第i项是重复的,忽略掉。否则存入结果数组 
    if (arr.indexOf(arr[i]) == i) {
      newArr.push(arr[i]);
    }
  }
  return newArr;
}
3. for循环 + sort() + push()
function goRepeat(arr) {
  // 先将数组进行排序,目的是将相同的元素放在一起
  let arrSort = arr.sort();
  let newArr = [];
  for (let i = 0; i < arrSort.length; i++) {
    // 判断两两之间的元素是否相等。不等则加入新数组,相等则不管
    if (arrSort[i] != arrSort[i + 1]) {
      newArr.push(arrSort[i]);
    }
  }
  return newArr;
}
4. 双重for循环 + splice()
function goRepeat(arr) {
  let len = arr.length
  // 尽量不改变原数组
  let newArr = [...arr]
  for (let i = 0; i < len; i++) {
    for (let j = i + 1; j < len; j++) {
      // 判断其余数组元素与第一个for循环的当前数组元素是否相等,相等则删除元素,
      // 防止数组塌陷,需要进行--操作
      if (newArr[i] === newArr[j]) {
        newArr.splice(i, 1);
        len--;
        j--;
      }
    }
  }
  return newArr
}
5. es6剩余运算符'... ' + new Set()
function goRepeat(arr) {
  let newArr = Array.from(new Set(arr))
  return newArr
}
6. includes() + push()
function goRepeat(arr) {
  var newArr = [];
  for (var i = 0; i < arr.length; i++) {
    if (!newArr.includes(arr[i])) {
      //检测新数组是否有某个值,无则添加,有则不管
      newArr.push(arr[i]);
    }
  }
  return newArr;
}
7. hasOwnProperty() + filter() + typeof
function goRepeat(arr) {
  var obj = {};
  return arr.filter(function (item, index, arr) {
//将值的类型和值当作对象属性,不存在则添加属性,存在则不管
    return obj.hasOwnProperty(typeof item + item)
      ? false
      : (obj[typeof item + item] = true);
  });
}
8. indexOf() + filter()
function goRepeat(arr) {
  return arr.filter(function (item, index, arr) {
    //当前元素在原始数组中的第一个索引===当前索引值,则返回当前元素
    return arr.indexOf(item) === index;
  });
}
9. reduce() + includes()
function goRepeat(arr) {
   return arr.reduce((prev,cur) => prev.includes(cur) ? prev : [...prev,cur],[]);
}
上一篇 下一篇

猜你喜欢

热点阅读