如何合并数组或对象中匹配key的对应值,实现同sellerID金额汇总
提问格式优化建议
- 你当前的提问已经包含了需求背景、代码示例、预期输出三个核心要素,整体清晰,符合技术提问的基本规范
- 可优化点1:你举的第一个示例
{sellerID1: 26.52, sellerID1: 12.46, sellerID2: 72.39}不符合JS对象语法,同一个对象内不能存在重复key,换成数组场景的示例会更准确 - 可优化点2:可以补充当前代码运行后得到的实际报错/错误输出,能进一步降低排查问题的成本
现有代码存在的问题
- 遍历方式错误:
for...in是用来遍历对象键的语法,遍历数组应该用for...of;且你拿到的item是外层包裹随机key的对象,不能直接取item.sellerID,需要先取出内层的商品信息对象 - 变量作用域错误:
sellerTotals、sellerIDs等变量定义在循环内部,每次循环都会重新初始化,循环结束后外部无法访问 - 语法错误:
push是数组的内置方法,你把sellerIDs和productPrice定义成了对象,无法调用push;且push是函数,调用应该用小括号()不是中括号[] - 逻辑错误:JS不存在
const sellerTotals = [...SellerIDs, ...productPrice] where SellerIDs "=="这类语法,你混淆了其他语言的查询语法 - 变量名大小写错误:代码里交替使用
SellerIDs和sellerIDs,JS大小写敏感,两者会被识别为不同变量
修正后可运行代码
const cartItems = [{ "oq23jnq89vj3": { sellerID: "aj8f9b73h2v37fy", productPrice: 3.99 } }, { "p98nq4hn984t": { sellerID: "aj8f9b73h2v37fy", productPrice: 19.99 } }, { "vzly89nvhj08": { sellerID: "zwlvin3u598n84w", productPrice: 10.00 } } ] // 统计对象定义在循环外部,避免被重置 const sellerTotals = {} for (const item of cartItems) { // 取出内层商品信息对象(每个item只有1个随机key,取第一个值即可) const productInfo = Object.values(item)[0] const currentSellerId = productInfo.sellerID const currentPrice = productInfo.productPrice // 首次统计该卖家时初始化金额为0 if (!sellerTotals[currentSellerId]) { sellerTotals[currentSellerId] = 0 } // 累加当前商品金额 sellerTotals[currentSellerId] += currentPrice } console.log(sellerTotals) // 输出:{ aj8f9b73h2v37fy: 23.98, zwlvin3u598n84w: 10 }
如果你需要把输出的key替换为sellerID1、sellerID2格式,再加一层key映射逻辑即可。
内容的提问来源于stack exchange,提问作者Mars2024
相关产品推荐
相关产品推荐

