gpt4 book ai didi

JavaScript ES6 获取在同一循环迭代中映射到数组中的值的总和

转载 作者:行者123 更新时间:2023-11-28 14:46:14 25 4
gpt4 key购买 nike

我一直在努力解决一个独特的挑战。我有一个这样的对象:

    obj = 
[
{item: "Skirt", price: 290},
{item: "Shoes", price: 300},
{item: "Skirt", price: 450}, {item: "Jeans", price: 35}
]

我将其映射为获取重复商品的数量及其各自的平均价格,以便所需的输出如下所示:

更新:

obj = 
[
{
Skirt: 2,
price: 370, //2 being the count of skirt items, 370 average price
Jeans: 1,
Price: 35,
Shoes: 1,
Price: 30
}
]

我正在使用此函数来映射项目:

Av_price = function(values) {
let new_val = new Map();
for (let x of values)
new_val.set([x["item"]], [(new_val.get(x["item"])|| 0) +1), (new_val.get(x["price"] || x["price"])/x["price"]])
return [...new_val.entries()];
};

这里的问题是:我能够计算商品的数量,比如裙子,但无法直接获得第二个值,我指的是价格;这样我就可以将它们除以商品总数(例如,在本例中,裙子为“2”)!这个独特的挑战让我困惑了两周。有没有办法获得在同一循环迭代中映射的所有裙子的数量,然后将价格总和除以它们的数量以获得平均价格?

我将非常感谢您的帮助!

最佳答案

您可以使用相同项目的哈希表并根据存储的值构建平均值。

var data = [{ item: "Skirt", price: 290 }, { item: "Shoes", price: 300 }, { item: "Skirt", price: 450 }, { item: "Jeans", price: 35 }],
hash = Object.create(null),
result = [];

data.forEach(function (o) {
var ref;
if (!hash[o.item]) {
hash[o.item] = [{ item: o.item }, [0, 0]]
result.push(hash[o.item]);
}
ref = hash[o.item][1];
ref[1] = (ref[0] * ref[1] + o.price) / ++ref[0];
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

通过更改结果的数据结构,您可以省略哈希表并直接获取结果对象。

var data = [{ item: "Skirt", price: 290 }, { item: "Shoes", price: 300 }, { item: "Skirt", price: 450 }, { item: "Jeans", price: 35 }],
result = data.reduce(function (o, { item, price }) {
o[item] = o[item] || 0;
o[item + 'Price'] = (o[item] * (o[item + 'Price'] || 0) + price) / ++o[item];
return o;
}, {});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于JavaScript ES6 获取在同一循环迭代中映射到数组中的值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46299382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com