2017-09-09 24 views
1

値「b、c」を保持する配列「A」と値「b」を保持しています。 論理フィルタとして配列 "A"の各行を使用し、 "B"のすべての行を循環させたい。foreach内でのforeachのネスト

私は何をすることです:

A.foreach(function(e) { // pick row n from A 
    B.foreach(function(x) { // run trough B 
     if (e.value === x.value) { // business logic 
      console.log(result); 
     } 
    }); 
}); 

質問 - これはプリミティブ(およびオブジェクト参照)のために許容可能なアプローチ(別のforeachの中のネストのforeach)

+0

入れ子になっています。 –

+0

はい、それはあなたが望むように多くのforEachsを入れ子にすることができます – turmuka

答えて

3

です:については

const result = A.filter(el => B.includes(el)); 

オブジェクトキーの等価性:

const result = A.filter( 
    el => B.some(
    el2 => el.value === el2.value 
) 
); 

ネストされたforEachsは、しかし、その場合には、私は聞きしたいが、壊れやすいように、ループのためのシンプルを好むだろう、完全に有効です。

for(const el of A){ 
    for(const el2 of B){ 
    if(el.value === el2.value){ 
     alert("found it"); 
     break;//O(log n) instead of O(n) 
    } 
    } 
} 
+0

良い答えが、これは何ですか? – turmuka

+0

@turmuka '論理的なフィルタとして配列" A "の各行を使用し、" B "のすべての行を循環させたいと思います。 –

+0

upvoted :) @Jonasw – turmuka

0

あなたがこのために試みることがあります。

そして勿論、これがために許容可能なアプローチでありますforeach内forechを書き込むが、データが長すぎると遅くなると、その複雑さはO(n2)になります。

var A=['a','b']; 
var B=['b','c']; 
A.forEach(function(e) { // pick row n from A 
    B.forEach(function(x) { // run trough B 
     if (e.value === x.value) { // business logic 
      console.log(x.value); 
     } 
    }); 
}); 
関連する問題