Мой подход заключался в создании новой функции addToArrayOrIncrementAmount
, которая принимает массив для изменения (contextArray
) и массив новых значений для добавления (newArray
).
Для каждого элемента в newArray
проверьте, существует ли этот элемент в contextArray
, используя свойство .name
в качестве идентификатора (должен быть уникальный идентификатор). Если этот идентификатор не существует, чем pu sh новый элемент, в противном случае измените / увеличьте значение amount
с помощью +=
. Вызовите эту новую функцию, например, addToArrayOrIncrementAmount(Ar1, Ar2)
.
class itemList {
constructor(public name: string, public amount: number) { }
}
function DisArr(Ar1: itemList[]) {
for (let item of Ar1) {
console.log(item.name + " -- " + item.amount);
}
}
function addToArrayOrIncrementAmount(contextArray: itemList[], newArray: itemList[]) {
newArray.forEach(product => {
const index = contextArray.findIndex((e) => e.name === product.name);
if (index === -1) {
contextArray.push(product);
} else {
contextArray[index].amount += product.amount;
}
});
}
var Ar1 = [new itemList('Apple', 3),
new itemList('Tomato', 4),
new itemList('Jam', 1)
];
var Ar2 = [new itemList('Orange', 3),
new itemList('Tomato', 8),
new itemList('Grape', 20)
];
console.log("Array before updating : ");
DisArr(Ar1);
addToArrayOrIncrementAmount(Ar1, Ar2);
console.log("Array before updating : ");
DisArr(Ar1);
Это версия JavaScript, чтобы я мог вставить ее в ответ и продемонстрировать, как она работает, нажав «Выполнить фрагмент кода».
class itemList {
constructor(name, amount) {
this.name = name;
this.amount = amount;
}
}
function DisArr(Ar1) {
for (let item of Ar1) {
console.log(item.name + " -- " + item.amount);
}
}
function addToArrayOrIncrementAmount(contextArray, newArray) {
newArray.forEach(product => {
const index = contextArray.findIndex((e) => e.name === product.name);
if (index === -1) {
contextArray.push(product);
} else {
contextArray[index].amount += product.amount;
}
});
}
var Ar1 = [new itemList('Apple', 3),
new itemList('Tomato', 4),
new itemList('Jam', 1)
];
var Ar2 = [new itemList('Orange', 3),
new itemList('Tomato', 8),
new itemList('Grape', 20)
];
console.log("Array before updating : ");
DisArr(Ar1);
addToArrayOrIncrementAmount(Ar1, Ar2);
console.log("Array before updating : ");
DisArr(Ar1);