У меня есть рабочая функция, которая объединяет два массива объектов разной длины (источник> цель при трех условиях:
- включает объекты с уникальным идентификатором из целевого массива
- включает объекты с уникальный идентификатор из исходного массива
- включает объекты с дублирующимися идентификаторами путем вычитания целевого значения из исходного значения
Мой вопрос: как я могу изменить этот код, чтобы он стал более компактным и эффективным? просто глядя на код, кажется, что это потребовало бы большого количества вычислительных ресурсов ..
Я пытался объединить массивы и запустить их через некоторое время l oop, но не смог найти способ определить, какие к какому массиву принадлежит объект ..
let target = [
{ id:1, x: 50 },
{ id:2, x: 30 },
{ id:3, x: 30 }
];
let source = [
{ id:1, x: 30 },
{ id:2, x: 13 },
{ id:4, x: 100 },
{ id:5, x: 5 }
];
let arrayResult = [];
function compute( target, source ) {
for (let i = 0; i < source.length; i++ ) {
let srcObj = source[i];
let tarObj = target.find(d => d.id === srcObj.id)
if (tarObj) {
let result = {
id: srcObj.id,
x: srcObj.x - tarObj.x
}
arrayResult.push(result);
} else {
arrayResult.push(srcObj);
}
}
for( let i = 0; i < target.length; i ++ ) {
let src = target[i];
let tar = arrayResult.find(d => d.id === src.id);
if (!tar){
arrayResult.push(src)
}
}
}
compute(target, source);
console.log(arrayResult);