无法使用splice删除数组中的元素
我正在迭代一个数组,并根据一个条件,我想根据索引(目前我使用)从该数组中删除特定元素 。 以下是我的代码,它正如预期的那样完美运行。
var todayWeekNo = new Date().getWeek(); $.each(arr, function (i, j) { var isEqual = todayWeekNo == new Date(j.Date).getWeek(); if (isEqual) { delete arr[i]; } });
你可以看到这个工作小提琴
在寻找更好的方法的同时,我开始了解这一点
删除不会从数组中删除元素,它只会将元素设置为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
请详细说明这个问题。
如果要从数组中删除元素,则需要确保索引仍匹配:
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
看起来$ .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++; } }
演示: 小提琴
您正在使用循环从数组中删除元素。
在这里,当你到达i = 2时,数组只剩下一个元素。 所以,它返回undefined。
$ .each显然没有处理数组的修改,我不确定(i
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); } }