数组去重方法集合

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) {
//使用[...new Set(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],[]);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值