const array1 = [
{
id: "40",
alias: "Number",
name: "Number",
},
{
id: "41",
alias: "Salary",
name: "Salary",
},
];
const array2 = [
{
id: "Sum__Salary__U3VtKFVTJTIwRW1wbG95ZWUuU2FsYXJ5KQ__",
name: "Salary",
},
{ id: "40", name: "Number" },
];
Я хочу изменить свой массив2, мой идентификатор «Зарплата» должен стать «41» во втором массиве вместо «Sum__Salary__U3VtKFVTJTIwRW1wbG95ZWUuU2FsYXJ5KQ__»
Делюсь фрагментами, которые я пробовал:
const result = array1
.filter((array1Value) =>
[...array2].find(
(array2Value) => array2Value.name === array1Value.alias
)
)
.map((column) => ({
id: column.id,
name: column.name,
}));
console.info("result: ", result);
Приведенный выше фрагмент работает нормально, но здесь я возвращаю новый набор массива с помощью карты. Есть ли способ заменить значения вместо создания нового набора массива? Ищете хороший подход для реализации этого.
🤔 А знаете ли вы, что...
JavaScript поддерживает работу с различными форматами данных, такими как JSON и XML.
Вы можете использовать forEach
Метод:
array2.forEach(data2 => {
array1.forEach(data1 => {
if (data2.name == data1.alias) data2.id = data1.id;
})
})
const array1 = [{
id: "40",
alias: "Number",
name: "Number",
},
{
id: "41",
alias: "Salary",
name: "Salary",
},
];
const array2 = [{
id: "Sum__Salary__U3VtKFVTJTIwRW1wbG95ZWUuU2FsYXJ5KQ__",
name: "Salary",
},
{
id: "40",
name: "Number"
},
];
console.info("Before :");
console.info(array2);
array2.forEach(data2 => {
array1.forEach(data1 => {
if (data2.name == data1.alias) data2.id = data1.id;
})
});
console.info("After :");
console.info(array2);
Вот решение с использованием функций высокого порядка forEach
и find
:
const array1 = [
{
id: "40",
alias: "Number",
name: "Number",
},
{
id: "41",
alias: "Salary",
name: "Salary",
},
];
const array2 = [
{
id: "Sum__Salary__U3VtKFVTJTIwRW1wbG95ZWUuU2FsYXJ5KQ__",
name: "Salary",
},
{ id: "40", name: "Number" },
];
array1.forEach((item1) => {
const matchingItem = array2.find((item2) => item2.name === item1.alias);
if (matchingItem) {
matchingItem.id = item1.id;
}
});
console.info("Modified array2:", array2);
В качестве однострочника:
a2.forEach(x => x.id = a1.find((y) => x.name===y.name)?.id ?? x.id);
const a1 = [{
id: "40",
alias: "Number",
name: "Number",
},
{
id: "41",
alias: "Salary",
name: "Salary",
},
];
const a2 = [{
id: "Sum__Salary__U3VtKFVTJTIwRW1wbG95ZWUuU2FsYXJ5KQ__",
name: "Salary",
},
{
id: "40",
name: "Number"
},
];
a2.forEach(x => x.id = a1.find((y) => x.name===y.name)?.id ?? x.id);
console.info(a2);