zoukankan      html  css  js  c++  java
  • [JS]应用splice删除多元素时出现的坑

    -------------------------------------------------------------------------------------

    先看一个片段:

    var fruits = ["Banana", "Orange", "Apple", "Mango"];
    fruits.splice(2,2);  # Banana,Orange

    上面两行代码完全没有问题,能达到我们想要的效果。

    假如变成了下面这种情况:

    var origin=["aa","bb","cc","dd"];
    var has = ["bb", "cc"];
    var _index = [];
    
    for (i in origin) {
        # 这里或者使用for..in,不是重点
        if ($.inArray(origin[i], has) != -1) {
            _index.push(i);
        }
    }
    
    # 重点来了
    for (j in _index) {
        origin.splice(_index[j], 1);
    }
    
    console.log(origin);  # 现在会输出我们想要的结果 ["aa", "dd"] 吗?

    运行一下,我们看到了不是我们想要的结果,原因是执行一次splice,原数组就被更改过了,索引数组的索引重新排列整齐,这样我们记录的老的排列索引就对不上了。

    原来是这样。

    那么我们现在需要修改一下重点splice部分的代码:

    var k = 0;
    for (j in _index) {
        origin.splice(_index[j] - k, 1);
        k++;
    }

     原理是我们缩减索引值,来达到和要删除元素的索引对上的目的。

    Link:http://www.cnblogs.com/farwish/p/5204370.html 

  • 相关阅读:
    Python import模块
    Python 内置函数
    Python Pickle序列化
    android xml布局文件属性说明
    android 中动画
    Android样式——Styles
    代码家
    Android UI目录
    Android 基本控件
    android and webview 网页应用
  • 原文地址:https://www.cnblogs.com/farwish/p/5204370.html
Copyright © 2011-2022 走看看