删除基于另一个数组的数组元素
Delete elements of array based on another array
我有一个类似的数组
var arrayFilterKeyValues=[{id:1,name:"one"},{id:2,name:"2"}..]
我有另一个类似的阵列
var valuesArr=["1","2","3","4"...]
现在,如果id在valuesArr
中,我将尝试从arrayFilterKeyValues
中删除元素。这是我正在使用的代码
for (var i = 0; i < arrayFilterKeyValues.length; ++i) {
var found = false;
for (var k = 0; k < valuesArr.length; k++) {
if (arrayFilterKeyValues[i].id == valuesArr[k]) {
found = true;
break;
}
}
if (found) {
delete arrayFilterKeyValues[i];
}
}
这是在删除元素,但当我检查数组时,它在数组中有逗号(,
),当我检查长度时,它仍然显示删除元素之前的数组长度。我在这里做错了什么?需要与IE8+兼容的解决方案
使用.filter和.indexOf
arrayFilterKeyValues = arrayFilterKeyValues.filter(function (el) {
return valuesArr.indexOf(el.id) === -1;
});
示例
jQuery版本
arrayFilterKeyValues = $.grep(arrayFilterKeyValues, function (el) {
return $.inArray(el.id, valuesArr) === -1;
});
更新
当我检查数组时,它有逗号(,)
发生这种情况是因为
删除数组元素时,数组长度不受影响。删除阵列元素
delete
运算符从对象中删除属性。
如果是数组,删除数组元素时,数组长度不受影响。即使删除了数组的最后一个元素,并且该元素在数组中不可用,这种情况也会发生。
来源:点击这里
要从阵列中删除元素,请使用以下
for (var i = 0; i < arrayFilterKeyValues.length; ++i) {
var found = false;
for (var k = 0; k < valuesArr.length; k++) {
if (arrayFilterKeyValues[i].id == valuesArr[k]) {
found = true;
break;
}
}
if (found) {
var removedele = arrayFilterKeyValues.splice(i, 1);
}
}
我发现在更新阵列时经常有用的模式是读写模式:
var wp = 0, n=arrayFilterKeyValues.length;
for (var rp=0; rp<n; rp++) {
if (valuesArr.indexOf(arrayFilterKeyValues[rp].id) == -1) {
arrayFilterKeyValues[wp++] = arrayFilterKeyValues[rp];
}
}
arrayFilterKeyValues.splice(wp);
即保持写入器指针CCD_ 5从0开始并对要保持的每个元素执行元素复制CCD_。最后,您可以调整阵列的大小。
然而,使用Javascript,数组的filter
方法已经完成了这种操作,唯一的问题是返回一个新的独立数组。可能通过不分配新元素而获得的效率不值得额外编码。还有更简单的
var new_arr = arrayFilterKeyValues.filter(function(x) {
return valuesArr.indexOf(x.id) == -1;
});
arrayFilterKeyValues.splice(0);
arrayFilterKeyValues.push.apply(arrayFilterKeyValues, new_arr);
尽管进行了额外的内存分配,但可能会更高效。
代替splice
/push
操作,可以对arrayFilterKeyValues
进行简单赋值。这是可以接受的,但请注意,在这种情况下,您不是在"更新"数组,而是将新数组分配给同一变量。
如果同一个对象在其他地方被引用,则情况会有所不同。
相关文章:
- 在函数中添加数组元素的数值
- 访问JSON对象内部的数组元素
- Mongoose-在更新中删除数组元素
- javascript数组元素是否知道其封闭数组
- 将数组元素附加到FormData dos'不适用于Firefox 15
- 如何在javascript中使用click函数选择数组元素
- 如何在JavaScript中剥离数组元素中的非整数
- 消隐数组元素是否生成自己的属性
- 如何使一个Math.random数组元素比另一个数组元素更有可能被选中
- 在Codrops的内容中添加数组元素展开缩略图网格预览
- 如何使用Jquery水平打印表中的数组元素,并在某个元素之后垂直打印
- 如何访问数组中的数组元素(JavaScript)
- 生成ACF标记位置的数组(元素列表后缺少])
- validate.js验证数组元素
- javascript函数,它将数组作为输入,将每个数组元素增加1,并返回增加值的新数组
- JavaScript Unshift EACH 数组元素
- 如何创建具有单个元素或元素数组的数组
- 如何在加号运算符之后选择数组元素的一部分
- 访问标记图标的图像数组元素
- JavaScript 合并相同的数组元素