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

先看一个片段:

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

[JS]应用splice删除多元素时出现的坑的更多相关文章

  1. js中如何删除某个元素下面的所有子元素?(两种方法)

    js中如何删除某个元素下面的所有子元素?(两种方法) 一.总结 方法一:通过元素的innerHTML属性 元素element.innerHTML=""; 方法二:通过元素的remo ...

  2. js动态加载HTML元素时出现的无效的点击事件

    项目中列表数据中隐藏着详情数据, 图一: 详情数据是:根据当前行的数据作为参数,通过ajax请求到后台返回的数据,再根据返回的结果动态生成HTML页面 图二: js文件中的这些js的点击事件无效: j ...

  3. jQuery.inArray和splice删除数组元素

    不知道数组下标的情况下,删除数组对应元素.实例: var arrays = ['a','b','c','d']; arrays.splice($.inArray('c',arrays),1); ale ...

  4. JS 之如何在插入元素时插在原有元素的前面而不是末尾

    语法: 父级.insertBefore(新元素,被插入的元素):          //在指定的元素前面加入一个新元素 父级.insertBefore(新元素,父级.children[0]); //在 ...

  5. JS for循环删除数组元素

    $(function(){ var aa = [1,1,2,3,3,4,4,5]; alert(aa); for (var i = aa.length-1;i >= 0 ;i--) { if ( ...

  6. 关于js中splice方法返回的结果

    一.前言 刚刚在使用splice()方法,发现这个方法返回的是删除后的数组元素,如果要获取删除指定元素后的数组,直接调用原来的数组即可!因为splice()会改变原来数组!之前对splice()方法一 ...

  7. iOS数组的去重,判空,删除元素,删除重复元素 model排序 等

    一: 去重 有时需要将NSArray中去除重复的元素,而存在NSArray中的元素不一定都是NSString类型.今天想了想,加上朋友的帮助,想到两种解决办法,先分述如下. 1.利用NSDiction ...

  8. vue 删除某个元素和删除某些元素

    今天做项目使用前端vue框架,需要循环遍历去删除一些数组元素.开始思想局限,一直纠结如何去循环删除,犹豫循环删除数组值下标会发生变化,并不是一种好的方法. 方法一:使用forEach 和 splice ...

  9. JS中彻底删除json对象组成的数组中的元素

    只是分享一个小知识~ 在JS中,对于某个由json对象组成的数组,例如: var test = [{ "a": "1", "b": &quo ...

随机推荐

  1. PHP导出数据到excel的方法

    很简单,看内容,不多说了: <?php //设置标题 $header[] = "ID"; $header[] = "订单"; $header[] = &q ...

  2. 用Visual Studio 2015 编写 MASM 汇编程序(一)环境配置

    原文地址:http://kipirvine.com/asm/gettingStartedVS2015/index.htm#CreatingProject 下面内容根据上面文章翻译整理而来! 开发32位 ...

  3. REST风格URL

    以前就是觉得 /nowamagic/article/article_id 这样的地址非常的漂亮,但是那只是表象罢了,了解深入以后,发现必须有一个客户端的Ajax Engine和Server端的服务配合 ...

  4. HTML页面嵌入视频和JS控制切换视频的问题

    文章摘自:http://www.cnblogs.com/jorton/archive/2012/03/19/vidio_in_site.html 首先,在页面中嵌入视频的HTML代码为: 1 < ...

  5. 利用反射及JDBC元数据编写通用查询方法

    元数据:描述数据的数据,ResultSetMetaData是描述ResultSet的元数据对象,从它可以得到数据集有多少了,每一列的列名... ResultSetMetaData可以通过ResultS ...

  6. 性能测试框架Locust初学笔记

    Locust初探 Locust是一款类似于Jmeter开源负载测试工具,所不同的是它是用python实现,并支持python脚本. locust提供web ui界面,能够方便用户实时监控脚本运行状态. ...

  7. lua 中的面向对象

    lua 是一种脚步语言,语言本身并不具备面向对象的特性. 但是我们依然可以利用语言的特性,模拟出面向对象的特性. 面向对象的特性通常会具备:封装,继承,多态的特性,如何在lua中实现这些特性,最主要的 ...

  8. csdn的资源使用

    资源库: http://lib.csdn.net/

  9. CSS基础篇

    写的不错,收藏 http://www.cnblogs.com/suoning/p/5625582.html

  10. Aspose.Words 的使用 Aspose.Total_for_.NET

    最近在做有个业务需要Word做好模版,数据库取出业务数据在写入Word模版里面,然后生成PDF给客户端的业务人员 之前找了半天,没有找到用微软的Microsoft.Office.Interop.Wor ...