Показать сообщение отдельно
  #2 (permalink)  
Старый 07.06.2018, 15:34
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от Artur_Hopf
А вообще как правильно соеденить 2 массива где совпадают поля.
если массивы небольшие, то вложенный цикл и сложность O(N*M), примерно так:
var a1 = [...], a2 = [...];
var a3 = [];
for (var i = 0; i < a1.length; ++i) {
  var item = { a[i] ... }; // копируем данные из a1
  a3.push(item); // забираем данные из a1
  for (var j = 0; j < a2.length; ++j) {
     if (item.xxx === a2[j].xxx) {
       item.nnn = a2[j].nnn;
       break;
     }
  }
}


если большие (десятки тыщ в каждом), то по одному из них создают объект-индекс, потом данные получают по индексу.

если совсем повезло и оба массива отсортированы по общему полю, можно параллельно обойти оба, линейное время на всё про всё.

если только один отсортирован, то поиск делением пополам.
Ответить с цитированием