数组移除某个相等的元素

      在日常工作中,大家或许会遇到后台返回数组列表,有些是我们不需要的,这样就需要我们自己来操作获取符合的数据。

      模拟下上面的需求, 去除arr[1,2,3,4,2] 中的所有值与 item 2 相等的元素。

思路: 判断当前元素是否存在函数中,并获取下标,删除当前下标的元素

example: 

    function remove(arr, item) {
      arr.forEach(element => {
        arr.splice(arr.indexOf(item), 1)
      });
      return arr
    }
    console.log(remove([1, 2, 3, 4, 2], 2)) // [1, 3]
这就很让人费解了,和想想中的不同复制代码

最后发现是因为splice的问题,在文中,splice是改变当前数组,每次循环都会从下标返回值除删除一位数字,优化代码如下:

    function remove(arr, item) {
      arr.forEach(element => {
        console.log('返回下标',arr.indexOf(item), arr)
        if (arr.indexOf(item) != -1) {
          arr.splice(arr.indexOf(item), 1)
        }
      });
      return arr
    }
    console.log(remove([1, 2, 3, 4, 2], 2))
// 返回下标 1 (5) [1, 2, 3, 4, 2]
// 返回下标 3 (4) [1, 3, 4, 2]
// 返回下标 -1 (3) [1, 3, 4]
// [1, 3, 4]复制代码

在最开始写错的时候,自己还上网搜了一波,发现别人的有个更好的方法,我在下边也记录下来,那就是filter()方法---------

方法一: filter

var newArray = arr.filter(callback(element [,index [,array]]))

fiter最多有三个参数,filter(数组的每项值, 每项值的下标, 自身数组)

  function remove(arr, item) {
    let newArr = arr.filter((ele, index, self) => {
      return ele !== item
    })
    return newArr
  }
  console.log(remove([1, 2, 3, 4, 2], 2)) // [1, 3, 4]复制代码

强烈建议: 大家可以多熟练使用这个,这个之前都没见过??,还是度娘告诉的,超好用的

方法二: 用空数组去push不相等的

这是另外一种思路,只能算拓展,使用还是方法一较好

思路: 循环遍历时,判断当前值是否等于要删除的元素,不等情况下,使用newArr.push(当前元素)

function remove(arr, item) {
   let b = []
   arr.forEach(element => {
     element != item ? b.push(element):""
   });
   return b
 }
 console.log(remove([1, 2, 3, 4, 2], 2)) // [1, 3, 4]
复制代码

   本文结束,这是前几天遇到的一个,我是小萌新,大佬看到别见怪???


转载于:https://juejin.im/post/5c4954016fb9a049bb7cafc7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值