亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

更新數組內對象的屬性

更新數組內對象的屬性

繁花如伊 2023-12-04 14:36:36
單擊按鈕后,fruitData 數組中的數據將添加到另一個名為“history”的數組中。我希望每當屬性“kultivar”、“blokNommer”和“year”與從fruitData 添加的對象匹配時,歷史記錄中的屬性“bins”就會更新。(如果有匹配,則 bins 屬性內的數字需要相加)例如這個:[{datum: "2020-04-08", kultivar: "bc", ha: "5", blokNommer: "1", bins: "20", year: "2020"}, {datum: "2020-04-08", kultivar: "bc", ha: "5", blokNommer: "1", bins: "20", year: "2020"}]應等于此(垃圾箱:40):[ {datum: "2020-04-08", kultivar: "bc", ha: "5", blokNommer: "1", bins: "40", year: "2020"}]我的代碼:let fruitData = [{    datum: "2020-04-08",    kultivar: "bc",    ha: "5",    blokNommer: "1",    bins: "20",    year: "2020"  },  {    datum: "2020-09-18",    kultivar: "wb",    ha: "5",    blokNommer: "1",    bins: "5",    year: "2020"  },  {    datum: "2020-03-09",    kultivar: "bc",    ha: "5",    blokNommer: "1",    bins: "20",    year: "2020"  },  {    datum: "2020-04-08",    kultivar: "bc",    ha: "5",    blokNommer: "1",    bins: "20",    year: "2020"  }]historyButton.addEventListener('click', () => {  addToHistory(fruitData)})function addToHistory(elements) {  for (let elem in elements) {    history = [...history, elements[elem]];  }  sortHistory()}function sortHistory() {  let newHistory = [];  history.forEach(function(item, index) {    if (newHistory.length === 0) {      newHistory.push(item)    } else {      newHistory.forEach(function(itm, idx) {        if (item.year === itm.year && item.kultivar === itm.kultivar && item.blokNommer ===          itm.blokNommer) {          item.bins = item.bins + itm.bins        } else {          newHistory.push(item)        }      })    }  })  console.log(newHistory)}這沒有給出我正在尋找的輸出。也嘗試過減少方法但沒有運氣。將不勝感激任何幫助!
查看完整描述

3 回答

?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

您需要迭代原始數組,并使用檢索數組中與 , 匹配的find()現有項目,以便訪問和更新它。historykultivarblokNommeryearbins


注意:在示例中將binsby轉換為其字符串也很重要,然后將其轉換回.Number()string


const arr = [

{datum: "2020-04-08", kultivar: "bc", ha: "5", blokNommer: "1", bins: "20", year: "2020"}, 

{datum: "2020-09-18", kultivar: "wb", ha: "5", blokNommer: "1", bins: "5", year: "2020"}, 

{datum: "2020-03-09", kultivar: "bc", ha: "5", blokNommer: "1", bins: "20", year: "2020"}, 

{datum: "2020-04-08", kultivar: "bc", ha: "5", blokNommer: "1", bins: "20", year: "2020"}

]


const history = [];


arr.forEach(item => {

  const found = history.find(({ kultivar, blokNommer, year }) => 

    kultivar === item.kultivar && blokNommer === item.blokNommer && year === item.year)

  

  if(found) {

    found.bins = (Number(found.bins) + Number(item.bins)).toString();

  } else {

    history.push(item);

  }

});


console.log(history);


查看完整回答
反對 回復 2023-12-04
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

如果您的fruitData數組不是很大,您可以嘗試使用迭代元素并搜索indexOf整個數組,將其轉換為字符串JSON.stringify

但如果數組很大,則代碼不是最佳的


const fruitData = [

  {datum: "2020-04-08", kultivar: "bc", ha: "5", blokNommer: "1", bins: "20", year: "2020"}, 

  {datum: "2020-09-18", kultivar: "wb", ha: "5", blokNommer: "1", bins: "5", year: "2020"}, 

  {datum: "2020-03-09", kultivar: "bc", ha: "5", blokNommer: "1", bins: "20", year: "2020"}, 

  {datum: "2020-04-08", kultivar: "bc", ha: "5", blokNommer: "1", bins: "20", year: "2020"}]

  

const sortHistory = (myArray) => Object.keys(myArray).reduce((accum, item) => {

  const currItem = JSON.stringify(myArray[item])

  const allArr = JSON.stringify(accum)

  return (allArr.indexOf(currItem) >= 0) ? accum : accum.concat(myArray[item])

}, [])   



console.log(sortHistory(fruitData))


查看完整回答
反對 回復 2023-12-04
?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

您的實施的問題是您正在更改itm.bins. Array.forEach 在遍歷每個元素時創建每個元素的副本,因此您更改的任何值都itm不會反映在實際數組中。idx因此,如果您想更改實際元素,則會向您提供。


另外,您用于+添加字符串,而不是整數。您需要先將其轉換為整數才能獲得所需的結果。


最終代碼應該是:


function sortHistory(){

        let newHistory = [];

        history.forEach(function(item, index){

            if(newHistory.length === 0){

                newHistory.push(item)

            } else{

                newHistory.forEach(function(itm, idx){

                    if(item.year === itm.year && item.kultivar === itm.kultivar && item.blokNommer === 

                       itm.blokNommer){

                        newHistory[idx].bins = parseInt(item.bins) + parseInt(itm.bins);

                    }else{

                        newHistory.push(item)

                    }

                })

            }

        })

        console.log(newHistory);

history = newHistory;}


查看完整回答
反對 回復 2023-12-04
  • 3 回答
  • 0 關注
  • 175 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號