我遇到了问题。我知道这看起来有点乱,但它向你展示了我的思维是如何运作的。所以问题是退出解构循环。第一个平均值是正确的,但第二个平均值延续了平均值。这个程序效率不高,但我想知道我做错了什么。任何帮助都会很棒。
const inventory = [
{name: 'Brunello Cucinelli',shoes: [{name: 'tasselled black low-top lace-up', price: 1000},{name: 'tasselled green low-top lace-up', price: 1100},{name: 'plain beige suede moccasin', price: 950},{name: 'plain olive suede moccasin', price: 1050}]},
{name: 'Gucci',shoes: [{name: 'red leather laced sneakers', price: 800},{name: 'black leather laced sneakers', price: 900}]}
];
var avgPriceArr = []; var target = []; var intermediateArr = [];var obj = {}; var destructuredObj = []; var intermediateObj = [];
for (var { name: designerName, shoes } of inventory) {
for (var { price } of shoes) {
destructuredObj.push(price);
avgPriceArr =destructuredObj.reduce((accum, currVal) => accum + currVal) /destructuredObj.length;
}
var innerObj = {
name: designerName,
averagePrice: avgPriceArr
};
target.push(innerObj);
var outterObj = {
designers: target
};
}
console.log(outterObj);
最佳答案
问题是您将所有鞋子放入一个数组 destructedObj
中,当循环重复时该数组不会重置。所以第一个平均值是正确的,但接下来的仍然在计算前面的鞋子。
一种不需要声明所有这些变量的更简单的方法是混合使用 map()
,这将使您的新数组与 reduce()
一起使用,这将使每个价格总计。像这样的东西:
const inventory = [
{name: 'Brunello Cucinelli',shoes: [{name: 'tasselled black low-top lace-up', price: 1000},{name: 'tasselled green low-top lace-up', price: 1100},{name: 'plain beige suede moccasin', price: 950},{name: 'plain olive suede moccasin', price: 1050}]},
{name: 'Gucci',shoes: [{name: 'red leather laced sneakers', price: 800},{name: 'black leather laced sneakers', price: 900}]}
];
let designers = inventory.map(({name,shoes}) => {
let total = shoes.reduce((total, {price}) => total+price, 0)
return {
name,
average:total/shoes.length
}
})
console.log("designers:", designers);
关于javascript - 在单独的对象中使用reduce进行对象解构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59042400/