2017-10-10 106 views
-2

我在JS这些variabiles:阵列过滤的javascript

var arr = [['name1', 2, 'filter1'], ['name2', 5, 'filter2'],['name3', 8, 'filter3'], ['name4', 1, 'filter2']]; 
 

 
var filter = 'filter1' //(this variable may have values: filter1, filter2, filter3)*.

如何可以根据滤波器变量值I滤波器阵列ARR

我的例子必须返回:

+1

份额一些代码 – Garfield

回答

2

除了过滤之外,您只需要获取内部数组的前两个元素。

Array#filter返回数组中的相同元素。为了获得没有过滤器项目的想要项目,您需要返回前两个对象,或者使用给定过滤器过滤项目(建议2)。

var array = [['name1', 2, 'filter1'], ['name2', 5, 'filter2'], ['name3', 8, 'filter3'], ['name4', 1, 'filter2']], 
 
    filter = 'filter2', 
 
    result = array.filter(a => a[2] === filter).map(a => a.slice(0, 2)); 
 
    
 
console.log(result);

var array = [['name1', 2, 'filter1'], ['name2', 5, 'filter2'], ['name3', 8, 'filter3'], ['name4', 1, 'filter2']], 
 
    filter = 'filter2', 
 
    result = array 
 
     .filter(a => a.some(v => v === filter)) 
 
     .map(a => a.filter(v => v !== filter)); 
 
    
 
console.log(result);

+0

关心它是一个ES6好的答案...不使用旧的浏览器没有babel ... – Alexis

+0

工作,谢谢你! –

2

通过使用过滤方法,你可以轻松地测试你想要什么,并只返回匹配元素

var arr = [['name1', 2, 'filter1'], ['name2', 5, 'filter2'],['name3', 8, 'filter3'], ['name4', 1, 'filter2']]; 
 

 
var filter = 'filter2'; 
 

 
var result = arr.filter(function(res){ 
 
    return res[2] == filter; 
 
}).map(function(filtered){ 
 
    return filtered.slice(0,2); 
 
}); 
 

 
console.log(result);

+0

我认为你的回答比我的好。 – DontVoteMeDown

+0

我认为太导致你的不工作,如果一个名称具有相同的价值比过滤器 – Alexis

+0

当然..这就是它! – DontVoteMeDown