2013-11-21 75 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); 
    } 
}