美文网首页
循环判断并删除数组

循环判断并删除数组

作者: 醉青风 | 来源:发表于2021-08-21 22:23 被阅读0次

操作还原

let list1 = [{name:'王二狗',id:122},{name:'翠花',id:123},{name:'小王',id:126}]
let list2 = [{name:'王二狗',id:122},{name:'翠花',id:123},{name:'张三',id:128}]
// 我们有个述求,就是把list2和 list1重复的数据从list2中删除
  list2.forEach((el,index)=>{
    if(list1.some(e=>{return e.id==el.id})){
        list2.splice(index,1)
    }
})
console.log(list2)
//输出结果 [{name: "翠花", id: 123}{name: "张三", id: 128}]

为什么会出现这种结果呢?

我们循环处理数组时删除数组中第一个元素的时候我们的数组长度是二。接着下一步运行,数组是从第二个元素开始操作,然而我们的第二个元素其实是我们的第三个元素,这样我们的 ‘翠花’就躲过了执行,原因找到了,我们的解决方案就好解决了

方法一 while 循环法

我们从最后一个开始操作,这样就没有元素可以躲了

let list1 = [{name:'王二狗',id:122},{name:'翠花',id:123},{name:'小王',id:126}]
let list2 = [{name:'王二狗',id:122},{name:'翠花',id:123},{name:'张三',id:128}]
// 我们有个述求,就是把list2和 list1重复的数据从list2中删除
let length = list2.length
// 我们从最后一个开始操作,这样就没有元素可以躲了
while(length--){
    if(list1.some(e=>{return e.id==list2[length].id})){
        list2.splice(length,1)
    }
}
onsole.log(list2) // [{name: "张三", id: 128}]

方法二 filter 过滤法

我们不去处理原数组,把处理好的数组赋值给原数组

let list1 = [{name:'王二狗',id:122},{name:'翠花',id:123},{name:'小王',id:126}]
let list2 = [{name:'王二狗',id:122},{name:'翠花',id:123},{name:'张三',id:128}]
// 我们有个述求,就是把list2和list1重复的数据从list2中删除
list2 = list2.filter(el=>{ return list1.every(e=>{return e.id != el.id})})
console.log(list2)// [{name: "张三", id: 128}]

方法三 复制数组法

循环的时候我们用复制出来的数组,然后就处理原数组即可

let list1 = [{name:'王二狗',id:122},{name:'翠花',id:123},{name:'小王',id:126}]
let list2 = [{name:'王二狗',id:122},{name:'翠花',id:123},{name:'张三',id:128}]
// 我们有个述求,就是把list2和 list1重复的数据从list2中删除
let list3 = [...list1]
list3.forEach((el,index)=>{
    if(list1.some(e=>{return e.id==el.id})){
        list2.splice(index,1)
    }
})
console.log(list2)// [{name: "张三", id: 128}]

笔者方法先介绍到这来,其实方法不止这三种。我们只要知道为什么出现这种问题,然后想办法去规避即可

相关文章

  • 循环判断并删除数组

    操作还原 为什么会出现这种结果呢? 我们循环处理数组时删除数组中第一个元素的时候我们的数组长度是二。接着下一步运行...

  • golang 两个数组过滤多种算法 benchmark效率对比

    说明 之前做的go项目,遇到一个关于数组的增删效率问题: 循环数组--判断--删除数组--得到需要的数组 示例:如...

  • JS删除数组中的重复项

    一维数组 将当前的数组进行排序,这样重复的元素位置相邻 循环判断是否有重复元素,有则删除 function has...

  • 数组去重的的方法

    1、使用new Set去重 2、使用for嵌套循环删除重复的值 3、indexof判断新数组是否包含这个相同值 ...

  • 判断某个字段的值与items数组内某一字段的值相同

    判断数组内某字段的值,是否与该字段的值相同,若不相同则添加数据进入数组;逻辑:通过for循环判断是否有相同,并设定...

  • 循环数组判断

    思路:购物车去结算时,如果数组里的商品都没有被选中,则提示“请至少选择一件商品”,反之跳转至商品确认页面

  • 数组对象方法

    数组的删除 数组的删除分为删除并返回第一个元素shift(),或者删除并返回最后一个元素pop() 数组的添加 数...

  • Java 程序员排行前 10 的错误,你有没有中?

    Array转ArrayList 判断一个数组是否包含某个值 在循环内部删除List中的一个元素 HashTable...

  • 26. Remove Duplicates from Sorte

    输入: 排好序的数组输出: 返回不重复的个数,并修改数组为不重复的数组,要求不能使用额外的空间思路: 循环判断前一...

  • 删除字符串中的所有相邻重复项

    题目: 题目的理解: 删除相邻且相同的两个字符。循环判断并删除,然后返回。 python实现 提交 成就有点差啊,...

网友评论

      本文标题:循环判断并删除数组

      本文链接:https://www.haomeiwen.com/subject/wjeqiltx.html