2013-11-21 26 views
0

我是迭代阵列并基于条件I 想要根据索引(目前我使用)删除该阵列中的特定元素。以下是我的代码正在按预期完美工作。无法使用拼接删除阵列中的元素

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

如果从数组移除元素,你需要确保该指数仍然匹配:

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--; 
    } 
} 
0

它看起来像$。每个()不是处理阵列的变形例

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

0

您正在使用循环从数组中删除元素。

这里,当你到达i = 2时,数组只剩下一个元素。所以,它返回undefined。

0

$。每个被obvously不处理数组的修改,我不知道的(我< 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); 
    } 
}