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属性就好!

  • 相关阅读:
    ‘Found duplicate PV’ warnings when using LVM with multipath storage in RHEL/CentOS
    如何卸载windows的服务?卸载服务
    富文本wangeditor层级太高覆盖问题
    vue wangeditor
    vue消息提示this.$message方法
    MySQL之查询指定时间的数据
    企业微信第三方应用PC端实现用户点击注册的三种方式
    两款不带广告的輸入法
    jquery、css 的选择器
    广信可视电话设置可安装应用权限
  • 原文地址:https://www.cnblogs.com/xiaojingyuan/p/6220045.html
Copyright © 2011-2022 走看看