簡體   English   中英

JavaScript如何同時過濾兩個數組

[英]JavaScript how to filter two arrays at the same time

說我有兩個數組:

var one = [1,2,3,4,5];

var two = ["A","B","C","D","E"];

如果我要過濾第一個數組,以便它返回此結果:

 var resultOne = one.filter(v => v == 2 || v == 3 );

結果將返回[2,3]但是如何根據第一個數組的結果過濾另一個數組以返回[B,C] ...?

 var one = [1,2,3,4,5]; var two = ["A","B","C","D","E"]; var resultOne = two.filter((v,i) => one[i] == 2 || one[i] == 3 ); console.log(resultOne) 

您可以通過傳遞索引在數組上實現過濾器,如果index + 1包含在結果數組中,則返回。

請注意:由於解決方案基於索引,因此不適用於數組的隨機數(非順序)。

 var one = [1,2,3,4,5]; var two = ["A","B","C","D","E"]; var resultOne = one.filter(v => v == 2 || v == 3 ); var resultTwo = two.filter((v,i) => resultOne.includes(i+1)); console.log(resultOne); console.log(resultTwo); 

或:在單行中:

 var one = [1,2,3,4,5]; var two = ["A","B","C","D","E"]; var result = two.filter((v,i) => one.filter(v => v == 2 || v == 3).includes(i+1)); console.log(result); 

您可以使用Array.reduce()

 var one = [1,2,3,4,5]; var two = ["A","B","C","D","E"]; const [resultOne, resultTwo] = one.reduce((acc, v, i) => (v == 2 || v == 3) ? (acc[0].push(v), acc[1].push(two[i]), acc) : acc, [[], []]); console.log(resultOne); console.log(resultTwo); 

如果兩個數組的長度不相同,則使用此版本:

 var one = [1,2,3,4,5,6]; var two = ["A","B","C","D","E"]; const [resultOne, resultTwo] = one.reduce((acc, v, i) => (v == 2 || v == 6) ? (acc[0].push(v), (i in two) ? acc[1].push(two[i]) : '', acc) : acc, [[], []]); console.log(resultOne); console.log(resultTwo); 

不錯的for循環或使用filter回調的第二個參數,該參數為您提供當前的數組索引。 只需將two對應的元素按索引推到resultTworesultTwo

var resultTwo = [];
var resultOne = one.filter((v, I) => { 
  var isMatch = v == 2 || v == 3;
  if (isMatch) resultTwo.push(two[i]);
  return isMatch;
});

編輯:剛意識到somone發布了相同的答案...我唯一可以添加的是您需要從原始數組中減去1才能得出正確的索引。

如果使用map,則可以映射過濾結果。 假設結果將始終是第二個集合的索引。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/map

var one = [1,2,3,4,5];
var two = ["A","B","C","D","E"];
var resultOne = one.filter(v => v == 2 || v == 3 );
var resultTwo = resultOne.map((indexFromResultOne) => two[indexFromResultOne - 1]); 
// Because you aren't using a zero based index.
console.log(resultTwo);

不是最有效的方法,但這是我想到的最通用,最易讀的方法來過濾多個對應的數組:

 var a = [1, 2, 3, 4, 5]; var b = ["A", "B", "C", "D", "E"]; var indices = []; for (var i = 0; i < a.length; i++) { var v = a[i]; if (v == 2 || v == 3) { indices.push(i); } } console.log(indices.map(i => a[i])); console.log(indices.map(i => b[i])); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM