无法使用拼接删除数组中的元素
Unable to delete an element in array using splice
我正在迭代一个数组,并且基于条件,我希望基于索引(当前使用)从该数组中删除特定元素。以下是我的代码,它正按照预期完美地工作。
var todayWeekNo = new Date().getWeek();
$.each(arr, function (i, j) {
var isEqual = todayWeekNo == new Date(j.Date).getWeek();
if (isEqual) {
delete arr[i];
}
});
你可以看到这个工作小提琴
在寻找更好的方法时,我发现
Delete不会从数组中删除元素,它只会设置元素定义为未定义。
所以我用arr.splice(i, 1);
替换了delete arr[i];
在前2次迭代中,它运行良好,而在最后一次迭代时却陷入了困境。
下面是控制台消息(jsfiddle):
index0 arr: [object Object] (index):43
index1 arr: [object Object] (index):43
index2 arr: undefined (index):43
Uncaught TypeError: Cannot read property 'Date' of undefined
请阐明这个问题。
如果要从数组中删除元素,则需要确保索引仍然匹配:
var arr = [0,1,2,3];
var index = 1;
arr[index] // 1
arr.splice(index,1);
index++;
arr[index] // 3 (2 was skipped, because arr[1] === 2 after splice)
解决方案:
for (var i=0; i<arr.length; i++) {
if (cond) {
arr.splice(i,1);
i--;
}
}
看起来$.each()没有处理数组的修改
var todayWeekNo = new Date().getWeek();
for (var i = 0; i < arr.length;) {
console.log("index" + i + " arr: " + arr[i]);
var isEqual = todayWeekNo == new Date(arr[i].Date).getWeek();
if (isEqual) {
arr.splice(i, 1);
} else {
i++;
}
}
演示:Fiddle
您正在使用循环从数组中移除元素。
这里,当您达到i=2时,数组只剩下一个元素。因此,它返回undefined。
$.each显然没有处理数组的修改,我不确定(i<arr.length)是否也这样做,我宁愿尝试:
for (i in arr) {
console.log("index" + i + " arr: " + arr[i]);
var isEqual = todayWeekNo == new Date(arr[i].Date).getWeek();
if (isEqual) {
arr.splice(i, 1);
}
}
相关文章:
- 在函数中添加数组元素的数值
- 访问JSON对象内部的数组元素
- Mongoose-在更新中删除数组元素
- javascript数组元素是否知道其封闭数组
- 将数组元素附加到FormData dos'不适用于Firefox 15
- 如何在javascript中使用click函数选择数组元素
- 如何在JavaScript中剥离数组元素中的非整数
- 消隐数组元素是否生成自己的属性
- 如何使一个Math.random数组元素比另一个数组元素更有可能被选中
- 在Codrops的内容中添加数组元素展开缩略图网格预览
- 如何使用Jquery水平打印表中的数组元素,并在某个元素之后垂直打印
- 如何访问数组中的数组元素(JavaScript)
- 生成ACF标记位置的数组(元素列表后缺少])
- validate.js验证数组元素
- JavaScript Unshift EACH 数组元素
- 如何在加号运算符之后选择数组元素的一部分
- 访问标记图标的图像数组元素
- JavaScript 合并相同的数组元素
- 删除仅空格数组元素
- JavaScript闭包和返回数组元素