Javascript -将FOR循环中具有相同值的多个键添加到空对象中

ibrsph3r  于 2022-11-20  发布在  Java
关注(0)|答案(2)|浏览(153)

我是新的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($)"]
}

任何帮助都将不胜感激。谢谢。

qrjkbowd

qrjkbowd1#

最后一个else if语句中的Object.assign(list, {canned : [${items[i].itemName},] })将覆盖第二次循环迭代中的现有列表canned
最简单的解决方案是在创建list时,在一开始就添加cannes

let list = {cannes: []}

然后您可以完全删除Object.assign行。
对于fruit,您应该执行相同的操作,并将Object.assign行替换为list.fruit.push()
如果只想在找到满足条件的项时创建cannes,只需添加一个if/else语句来检查cannes是否存在。

if ( ! 'canned' in list )
    Object.assign(list, {canned : [`${items[i].itemName}`,] })
else
    list.canned.push(`${items[i].itemName}`)
qv7cva1a

qv7cva1a2#

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 = {};
let counter = 0;

itemData.forEach(isOnSale);
console.log(list);

function isOnSale(item) {
  

    if (item['onSale'] === false && item['category'] === 'canned') {

      //Initially Creating array and then pushing items 
      if (counter > 0) {
        list['canned'].push(item['itemName'])
      } else {
        list['canned'] = Array(item['itemName'])
      }

          
      counter++;

    } else if (item['category'] === 'fruit') {
    
    if (counter > 0) {
        (item['onSale'] === false) ? list['fruit'].push(item['itemName']): list['fruit'].push(`${item['itemName'].concat('($)')}`);
      } else {
        list['fruit'] = (item['onSale'] === false) ? Array(item['itemName']) : Array (`${item['itemName'].concat('($)')}`);
      }
    }

}

相关问题