我是新的stackoverflow所以我很抱歉,如果这个问题已经得到了回答,什么没有发现只是导致了更多的混乱。一直在这个小时。
我的问题是,当我试图添加多个具有相同值的键时,我只得到最后一个键和值存储在对象中。我使用if/else语句来尝试实现我的目标。下面是我的代码。
var itemData = [{
category: 'fruit',
itemName: 'apple',
onSale: false
},
{
category: 'canned',
itemName: 'beans',
onSale: false
},
{
category: 'canned',
itemName: 'corn',
onSale: true
},
{
category: 'frozen',
itemName: 'pizza',
onSale: false
},
{
category: 'fruit',
itemName: 'melon',
onSale: true
},
{
category: 'canned',
itemName: 'soup',
onSale: false
},
];
let list = { }
for (let i = 0; i < items.length; i++) {
if (items[i].category === 'fruit' && items[i].onSale === false) {
Object.assign(list, {fruit : [`${items[i].itemName}`]})
}
else if (items[i].category === 'fruit' && items[i].onSale === true) {
list.fruit.push(`${items[i].itemName}${'($)'}`)
}
else if (items[i].category === 'canned' && items[i].onSale === false) {
Object.assign(list, {canned : [`${items[i].itemName}`,] })
list.canned.push(`${items[i].itemName}`)
}
}
console.log(列表)显示
{
canned: ["soup", "soup"],
fruit: ["apple", "melon($)"]
}
但我期待
{
canned: ["beans", "soup"],
fruit: ["apple", "melon($)"]
}
任何帮助都将不胜感激。谢谢。
2条答案
按热度按时间qrjkbowd1#
最后一个else if语句中的
Object.assign(list, {canned : [
${items[i].itemName},] })
将覆盖第二次循环迭代中的现有列表canned
。最简单的解决方案是在创建
list
时,在一开始就添加cannes
然后您可以完全删除
Object.assign
行。对于
fruit
,您应该执行相同的操作,并将Object.assign
行替换为list.fruit.push()
如果只想在找到满足条件的项时创建
cannes
,只需添加一个if/else语句来检查cannes
是否存在。qv7cva1a2#