簡體   English   中英

Javascript - 將 FOR 循環中具有相同值的多個鍵添加到空 object

[英]Javascript - Adding multiple keys with same value from FOR loop into empty object

我是 stackoverflow 的新手,所以如果這個問題得到了回答,我很抱歉,發現的只是導致了更多的混亂。 在這里呆了幾個小時。

我的問題是當我嘗試添加具有相同值的多個鍵時,我只得到最后一個鍵和值存儲在 object 中。我使用 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(list) 顯示

{
  canned: ["soup", "soup"],
  fruit: ["apple", "melon($)"]
}

但我期待

{
  canned: ["beans", "soup"],
  fruit: ["apple", "melon($)"]
}

任何幫助,將不勝感激。 謝謝你。

Object.assign(list, {canned: [`${items[i].itemName}`,] })在最后一個 else if 語句中覆蓋在第二次循環迭代中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}`)

 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('($)')}`); } } }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM