#javascript #arrays #json
#javascript #массивы #json
Вопрос:
У меня есть 2 объекта массива
1.
itemMapping = {
id:1,
hierarchyDesc:"Men's casual",
style:"Denim Pants",
styleDesc:"VS pants",
color:"blue"
}
mapData = {
hierarchyDesc:"Women's casual",
style:"Cotton Pants",
styleDesc:"pants"
}
Мне нужно сравнить ключ каждого itemMapping с ключом каждого MapData и сформировать новый массив, если какой-
либо из ключей совпадает (например: здесь в itemMapping и MapData — hierarchyDesc, style, styleDesc есть в обоих), затем возьмите эти соответствующие записи объектов из массива MapData и нажмите на newArray,
еслион не соответствует и находится только в массиве отображения элементов, затем возьмите эти не совпадающие записи объектов из массива отображения элементов и нажмите на newArray.
Примечание: весь ключ объекта MapData будет присутствовать в itemMapping, но наоборот неверно.
ожидаемый результат:
newArray = {
id:1,
hierarchyDesc:"Women's casual",
style:"Cotton Pants",
styleDesc:"pants",
color:"blue"
}
как я могу добиться этого в Javascript?
Ответ №1:
Вы можете использовать оператор распространения ES6 const res = {...itemMapping, ...mapData }
Смотрите ниже
const itemMapping = { id:1, hierarchyDesc:"Men's casual", style:"Denim Pants", styleDesc:"VS pants", color:"blue" },
mapData = { hierarchyDesc:"Women's casual", style:"Cotton Pants", styleDesc:"pants" };
const res = {...itemMapping, ...mapData }
console.log(res);
Ответ №2:
Вы можете использовать map над ключами itemMapping
объекта и использовать Object.fromEntries
для преобразования массива пар ключ-значение в объект.
const itemMapping = { id:1, hierarchyDesc:"Men's casual", style:"Denim Pants", styleDesc:"VS pants", color:"blue" },
mapData = { hierarchyDesc:"Women's casual", style:"Cotton Pants", styleDesc:"pants" };
const res = Object.fromEntries(Object.keys(itemMapping)
.map(k => [k, k in mapData ? mapData[k] : itemMapping[k]]));
console.log(res);
Ответ №3:
Вы могли бы попробовать что-то подобное этому.
const newValues = {};
for (const item in itemMapping) {
if(mapData[item]){
newValues[item] = mapData[item]
} else {
newValues[item] = itemMapping[item]
}
}
Требуемые значения ключа добавляются в объект newValues (не в массив)
Ответ №4:
Альтернативой вышеуказанному подходу является использование уменьшения массива для ключей itemMapping
. Обратите внимание, что я бы также рассмотрел переименование newArray
во что-то другое, поскольку это объект, а не массив.
const itemMapping = {
id: 1,
hierarchyDesc: "Men's casual",
style: "Denim Pants",
styleDesc: "VS pants",
color: "blue"
};
const mapData = {
hierarchyDesc: "Women's casual",
style: "Cotton Pants",
styleDesc: "pants"
};
const newArray = Object.keys(itemMapping).reduce((acc, key) => {
acc[key] = key in mapData ? mapData[key] : itemMapping[key];
return acc;
}, {});
console.log(newArray)