2017-03-09 57 views
1

我想有另一種多維數組的一個「獨特的」陣列的特定行,數組看起來是這樣的:使用過濾器()上的2維數組(JavaScript)的

var bigArray = Array(
       ["text", "text", "A", 1, 2], 
       ["text", "text", "S", 3, 4], 
       ["text", "text", "S", 4, 4], 
       ["text", "text", "S", 5, 7], 
       ["text", "text", "S", 2, 1], 
       ["text", "text", "S", 1, 0] 
      ); 

結果應該是像

uniqueArray = [A, S]

這是過濾功能我有個大氣壓:

var uniqueArray = bigArray.filter(function(item, i, ar){ return ar.indexOf(item) === i; }); 

該函數給出了大數組中所有唯一值,但我只需要行[2]中的唯一值。 我想參數必須從濾波器函數中稍微調整一下,但我不太瞭解它們。 感謝您的幫助

回答

1

你可以這樣做

var bigArray = Array(
    ["text", "text", "A", 1, 2], 
    ["text", "text", "S", 3, 4], 
    ["text", "text", "S", 4, 4], 
    ["text", "text", "S", 5, 7], 
    ["text", "text", "S", 2, 1], 
    ["text", "text", "S", 1, 0] 
); 

var newArray = [] 
bigArray.forEach(function(item) { 
    if (newArray.indexOf(item[2]) == -1) { 
    newArray.push(item[2]) 
    } 
}) 
console.log(newArray) 

DEMO

4

Array#filter返回項目如果數組而不是內部數組的部分。因此,您需要一種不同的方法,只需稍後映射想要的值和填充。

使用ES6,您可以映射想要的列並使用Set獲取唯一值。

var bigArray = [["text", "text", "A", 1, 2], ["text", "text", "S", 3, 4], ["text", "text", "S", 4, 4], ["text", "text", "S", 5, 7], ["text", "text", "S", 2, 1], ["text", "text", "S", 1, 0]], 
 
    result = [...new Set(bigArray.map(a => a[2]))]; 
 
    
 
console.log(result);

ES5利用哈希表。

var bigArray = [["text", "text", "A", 1, 2], ["text", "text", "S", 3, 4], ["text", "text", "S", 4, 4], ["text", "text", "S", 5, 7], ["text", "text", "S", 2, 1], ["text", "text", "S", 1, 0]], 
 
    hash = Object.create(null), 
 
    result; 
 

 
bigArray.forEach(function (a) { 
 
    hash[a[2]] = true; 
 
}); 
 
result = Object.keys(hash); 
 
    
 
console.log(result);

+0

感謝尼娜的回答,但它太複雜,我對不起:P我會去對於下面的答案來自@brk,它更具可讀性,我明白它的作用。無論如何感謝您的時間。 – smirnoff103