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);

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))

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;}
- 3 回答
- 0 關注
- 175 瀏覽
添加回答
舉報