2017-10-10 101 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