zoukankan      html  css  js  c++  java
  • 删除数组中多个不连续的数组元素的正确姿势

    var arr = ['a', 'a', 'b', 'c', 'd', 'a', 'a', 'e', 'g', 'a', 'f'];

    我们现在将数组中所有的‘ a’ 元素删除;

    arr.forEach(function(key, index) {
    key === 'a' ? arr.splice(index, 1) : '';
    })

    //["a", "b", "c", "d", "a", "e", "g", "f"]

    只要相邻的‘ a’ 元素, 都没被删除, splice不但可以删除原素本身, 还同时可以减少数组长度( 就是抹去一切痕迹),
    这样导致后续的数组元素会代替已经删除的元素的位置, 但是循环是按照数组的下标按顺序删除, 这样就会漏掉迁移的元素。


    方法一: delete

    arr.forEach(function(key, index) {
    key === 'a' ? delete arr[index] : '';
    })


    //["b", "c", "d", "e", "g", "f"]

    可以看到这是我们想要的结果, 因为delete这个方法删除元素时并不会删除本身的位置, 会有个‘ undefind’ 来代替着元素,
    这样我们的循环队列的顺序就正常了, 但是这样数组长度是不会有变化的, 这个方法就看自己的需求了


    方法二: 取而不删

    简单的例子:

    var newArr = arr.filter(function(key) {
    return key !== 'a'
    })


    //["b", "c", "d", "e", "g", "f"]

    一样的结果, 我们的思路就是既然删除是因为我们想要得到符合条件的数组, 那我们直接去筛选符合条件的新数组就解决了!

    实际中我们面对的业务数据都是比较复杂的,所以下面的稍微复杂一点

    复杂的例子:

    需求:1 我们需要删除掉checked为"icon-chosen"的所有父项,以及父项中的子项orderDetails。

       2 父项中有多个子项,但如果有一个子项checked是"icon-choose",不是"icon-chosen",那么父项也需要保留下来不被删除。

    //上面的数据保存在productList中,我们看到只有数组中第一个父元素的第二个子元素checked是"icon-choose"

    var newProductList = [];

    productList.forEach(function(key) {

      //首先筛选父项"icon-choose",取出我们需要的父项

      if (key.checked == "icon-choose") {

        //筛选子项"icon-choose",取出我们需要的子项

        var newOrderDetails = key.orderDetails.filter(function(keys) {

          return keys.checked == "icon-choose"

      });

        //将符合条件的子项赋值给被筛选的子项

        key.orderDetails = newOrderDetails;

        //将筛选和改变的父项放入新的数组

        newProductList.push(key);
      }

    })

    console.info(newProductList);

    最后的结果就是要保留数组中第一个父元素的第二个子元素checked是"icon-choose",同时保留父元素;数据可能有点多,但其他的只是干扰项,

    我们只关注checked属性就好!

  • 相关阅读:
    强化学习的基本迭代方法
    基于文本描述的事务聚类
    学习强化学习之前需要掌握的3种技能
    其它 华硕 ASAU S4100U 系统安装 win10安装 重装系统 Invalid Partition Table 解决
    数据分析 一些基本的知识
    Python 取样式的内容 合并多个文件的样式 自定义样式
    电商 Python 生成补单公司需要的评论格式3
    SpringBlade 本地图片上传 生成缩略图
    SQL Server 字符串截取
    SpringBlade 本地图片上传
  • 原文地址:https://www.cnblogs.com/xiaojingyuan/p/6220045.html
Copyright © 2011-2022 走看看