我有一个产品ID的字符串数组,如下所示:["A","A"、"B"、"A"]还有另一个整数价格数组,如下所示:[30,50,10,40]
生成具有唯一项目及其总成本的Javascript对象的最佳方法是什么,因为整数的顺序是与相同产品编号顺序相关的价格,所以理想情况下,它会返回这样的对象,即
{"A":120,"B":10}
谢谢!
我对Javascript和SQL相对陌生,但我尝试过使用foreach语句,当我将该列提取到数组中时,我成功地使用该语句来生成项目的唯一计数,但没有出现上述问题。
简单归约循环
const productIds = ["A", "A", "B", "A"];
const prices = [30, 50, 10, 40]
const totals = productIds.reduce((acc, key, index) => {
acc[key] = (acc[key] || 0) + prices[index];
return acc;
}, {});
console.log(totals);
假设两个数组的长度相等,在这种情况下,通过使用带有映射的线性搜索来存储和添加计数将是正确的方法:
function getSummation(productIds, prices) {
const store = {};
for (let i=0; i < productIds.length; i++) {
if (!store[productIds[i]])
store[productIds[i]] = 0;
store[productIds[i]] += prices[i];
}
return store;
}
使用逗号运算符的较短版本
const products = ["A", "A", "B", "A"];
const prices = [30, 50, 10, 40];
const obj = products
.reduce((acc,cur,i) => (acc[cur] = (acc[cur] ??= 0) + prices[i], acc),{});
console.log(obj)
const keys = ["A", "A", "B", "A"];
const values = [30, 50, 10, 40];
const result = keys.reduce((t, v, i) => ({...t, [v]: (t[v] || 0) + values[i]}), {});
console.log(result);