Для объединения двух массивов объектов на основе общего поля, например, `id`, можно использовать методы массива, такие как `reduce` и `map`, чтобы избежать использования двух циклов `forEach`. Предлагаю следующий подход:
1. Преобразуйте второй массив в объект, где ключом будет `id`, а значением — объект. Это позволит быстро находить соответствующий элемент по `id`.
2. Пройдите по первому массиву, находите соответствующие объекты из второго массива и объединяете их.
Вот пример кода, который выполняет описанные шаги:
```javascript
const array1 = [{
"id": 3231,
"stage": 3,
"sort": 999
}];
const array2 = [{
"id": 3231,
"status_client": 3,
"status_date": "2024-11-22 16:18:58",
"sort": 999
}];
// Преобразуем второй массив в объект для быстрого поиска по id:
const map2 = array2.reduce((acc, obj) => {
acc[obj.id] = obj;
return acc;
}, {});
// Объединяем массивы:
const combinedArray = array1.map(obj1 => {
const obj2 = map2[obj1.id];
return obj2 ? { ...obj1, ...obj2 } : obj1;
});
console.log(combinedArray);
```
### Как это работает:
1. В `reduce` мы перебираем второй массив `array2` и создаем объект `map2`, где ключами являются `id`, а значениями — сами объекты из `array2`.
2. Затем с помощью `map` мы перебираем массив `array1`. Для каждого объекта мы ищем его соответствие в `map2` с помощью `obj2 = map2[obj1.id]`.
3. Если соответствие найдено, мы объединяем объекты с помощью оператора расширения `...`. Если соответствие не найдено, оставляем объект из первого массива без изменений.
Этот подход эффективен, так как использует всего два прохода по массивам, что делает его оптимальным даже для больших массивов.