2014-12-04 85 views
0

的陣列刪除重複如何刪除重複陣列上象下面這樣:的JavaScript陣列

arr = [ 
    [828, 187, 1, 14, 1, 25, 1417608935730], 
    [828, 187, 1, 14, 1, 25, 1417608935740], 
    [828, 187, 1, 14, 1, 25, 1417608935750], 
    [828, 187, 1, 14, 1, 25, 1417608935760], 
    [600, 578, 1, 14, 1, 25, 1417608935760], 
    [828, 187, 1, 14, 1, 25, 1417608935780], 
    [828, 187, 1, 14, 1, 25, 1417608935790] 
] 

由於第四和第五陣列具有1417608935760類似的價值我想刪除重複的旁邊,只保留一個。

我試過,但沒有工作:

$.each(arr, function(i, insidearr){ 
    if($.inArray(insidearr[6], uniqueNames) === -1) 
     uniqueNames.push(insidearr); 
}); 

請幫助。在此先感謝

+1

所以克隆陣列「重複「這裏只是估計數組中的最後一個值? – Sirko 2014-12-04 11:14:52

+0

yah最後一個值@Sirko – 2014-12-04 11:16:24

回答

2

您正在將整行推入uniqueNames。該數組永遠不會等於每行末尾的數字,因此$.inArray()測試將始終失敗。對於您正在比較的元素和結果數組,您需要單獨的數組。

var newArray = []; 
var uniqueNames = {}; 
$.each(arr, function(i, insidearr) { 
    if (!(insidearr[6] in uniqueNames)) { 
     newArray.push(insidearr); 
     uniqueNames[insidearr[6]] = true; 
    } 
}); 

我所使用的對象,而不是爲uniqueNames數組,因爲搜索對象關鍵字大於掃描陣列更快。

0

只是嘗試:

var uniqueArr = $.grep(arr, function(insidearr){ 
    if ($.inArray(insidearr[6], uniqueNames) === -1) { 
     uniqueNames.push(insidearr[6]); 
     return true; 
    } 
}); 
0

試試這個:

var arr = [ 
    [828, 187, 1, 14, 1, 25, 1417608935730], 
    [828, 187, 1, 14, 1, 25, 1417608935740], 
    [828, 187, 1, 14, 1, 25, 1417608935750], 
    [828, 187, 1, 14, 1, 25, 1417608935760], 
    [600, 578, 1, 14, 1, 25, 1417608935760], 
    [828, 187, 1, 14, 1, 25, 1417608935780], 
    [828, 187, 1, 14, 1, 25, 1417608935790] 
]; 

var len = arr.length; 
while(--len) { 
    if(arr[len][6] == arr[len-1][6]) { 
    arr.splice(len-1, 1) 
    } 
} 
console.log(arr); // here is what you want 

如果你不想操縱arr,你只需要通過var newArr = arr.slice()