2017-03-09 60 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