从关联的字符串数组和整数数组中创建具有总值的对象



我有一个产品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);

最新更新