[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
[JS]应用splice删除多元素时出现的坑的更多相关文章
- js中如何删除某个元素下面的所有子元素?(两种方法)
js中如何删除某个元素下面的所有子元素?(两种方法) 一.总结 方法一:通过元素的innerHTML属性 元素element.innerHTML=""; 方法二:通过元素的remo ...
- js动态加载HTML元素时出现的无效的点击事件
项目中列表数据中隐藏着详情数据, 图一: 详情数据是:根据当前行的数据作为参数,通过ajax请求到后台返回的数据,再根据返回的结果动态生成HTML页面 图二: js文件中的这些js的点击事件无效: j ...
- jQuery.inArray和splice删除数组元素
不知道数组下标的情况下,删除数组对应元素.实例: var arrays = ['a','b','c','d']; arrays.splice($.inArray('c',arrays),1); ale ...
- JS 之如何在插入元素时插在原有元素的前面而不是末尾
语法: 父级.insertBefore(新元素,被插入的元素): //在指定的元素前面加入一个新元素 父级.insertBefore(新元素,父级.children[0]); //在 ...
- 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 ( ...
- 关于js中splice方法返回的结果
一.前言 刚刚在使用splice()方法,发现这个方法返回的是删除后的数组元素,如果要获取删除指定元素后的数组,直接调用原来的数组即可!因为splice()会改变原来数组!之前对splice()方法一 ...
- iOS数组的去重,判空,删除元素,删除重复元素 model排序 等
一: 去重 有时需要将NSArray中去除重复的元素,而存在NSArray中的元素不一定都是NSString类型.今天想了想,加上朋友的帮助,想到两种解决办法,先分述如下. 1.利用NSDiction ...
- vue 删除某个元素和删除某些元素
今天做项目使用前端vue框架,需要循环遍历去删除一些数组元素.开始思想局限,一直纠结如何去循环删除,犹豫循环删除数组值下标会发生变化,并不是一种好的方法. 方法一:使用forEach 和 splice ...
- JS中彻底删除json对象组成的数组中的元素
只是分享一个小知识~ 在JS中,对于某个由json对象组成的数组,例如: var test = [{ "a": "1", "b": &quo ...
随机推荐
- Discuz有关问题解决办法汇总
1.Can not write to cache files, please check directory ./data/ and ./data/cache/ . 无法写入缓存 解决办法:在sour ...
- c++ 中__declspec 的用法
__declspec ( extended-decl-modifier-seq )扩展修饰符:1:align(#) 用__declspec(align(#))精确控制用户自定数据的对齐方式 ,# ...
- main 方法,
默认是设置是alt / 就是你打出main以后按(alt /)
- Angular学习
一.Angular是什么 基于JS的框架,类似JQuery,利用数据绑定和依赖注入实现页面数据的渲染,无需人为写大量的JS,减少了代码量,优美了代码. 二.Angular优缺点 Angular适用与C ...
- How to configure Veritas NetBackup (tm) to write Unified and Legacy log files to a different directory
Problem DOCUMENTATION: How to configure Veritas NetBackup (tm) to write Unified and Legacy log files ...
- SG函数闲扯(转)
http://ydcydcy1.blog.163.com/blog/static/216089040201342412717440/ 没来得及看.
- 不同hadoop集群之间迁移hive数据
#!/bin/bash #set -x DB=$1 #获取hive表定义 ret=$(hive -e 'use ${DB};show tables;'|grep -v _es|grep -v _hb| ...
- window7下使用vagrant打造lamp开发环境(一)
前言: 公司电脑只有win7 + (xampp || wamp)开发,处于个人爱好,想学习下在最舒服的开发环境下开发,也不想安装双系统,想用Vmware电脑却配置不高,vagrant+virtual ...
- COSBench性能测试配置--一张图说明一切
COSBench性能测试配置--一张图说明一切: 测试配置,并发数,运行时间设置
- mac java目录
/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home mac java的安装目录为 /Library/Java/JavaVir ...