我正在迭代一个数组并且基于一个条件我想要根据索引(当前我使用的)删除该数组中的特定元素。以下是我的代码,它正如预期的那样完美运行。
var todayWeekNo = new Date().getWeek();
$.each(arr, function (i, j) {
var isEqual = todayWeekNo == new Date(j.Date).getWeek();
if (isEqual) {
delete arr[i];
}
});
您可以看到此working fiddle
在寻找更好的方法时,我开始知道
Delete won't remove the element from the array it will only set the element as undefined.
所以我用 delete arr[i];
arr.splice(i, 1);
对于前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
请详细说明这个问题。
答案 0 :(得分:0)
如果要从数组中删除元素,则需要确保索引仍然匹配:
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--;
}
}
答案 1 :(得分:0)
看起来$ .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
答案 2 :(得分:0)
您正在使用循环从数组中删除元素。
这里,当你到达i = 2时,数组只剩下一个元素。所以,它返回undefined。
答案 3 :(得分:0)
$。每个人都没有处理数组的修改,我不确定(i&lt; 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);
}
}