Вложение foreach в foreach

1

У меня есть значения удерживания массива "A" [a, b] и значения "B" в массиве [b, c]; Я хочу использовать каждую строку массива "A" как логический фильтр и цикл через каждую строку "B";

Что я делаю:

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
    Вложенные forEachs работают, да.
  • 0
    да, это работает, вы можете вкладывать столько forEachs, сколько хотите
Теги:

2 ответа

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
    хороший ответ, но это то, что ОП спросил?
  • 0
    @turmuka I want to use each row of array "A" as a logical filter and cycle trough every row of "B"; ответили, да.
Показать ещё 2 комментария
0

Вы можете попробовать:

И ofCourse это приемлемый подход для написания forech внутри foreach, но когда данные слишком длинны, то медленнее, а его сложность будет 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);
        }
    });
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню