js关于数组的问题

有类似数组

[
    {num: 10, unit: '千克'},
    {num: 20, unit: '个'},
    {num: 20, unit: '千克'},
    {num: 30, unit: '只'},
]

最后显示成 30千克+20个+30只

阅读 2.7k
5 个回答
function getResult (l) {
    const m = l.reduce((r, i) => (r[i.unit] = i.num + (r[i.unit] || 0), r), {})
    return Object.keys(m).map(u => `${m[u]}${u}`).join('+')
}
function print(arr) {
  const arrObj = {};
  arr.forEach((item) => {
    if (arrObj[item.unit]) {
      arrObj[item.unit] += item.num;
    } else {
      arrObj[item.unit] = item.num;
    }
  });
  return Object.keys(arrObj)
    .map((item) => `${arrObj[item]}${item}`)
    .join("+");
}

console.log(
  print([
    { num: 10, unit: "千克" },
    { num: 20, unit: "个" },
    { num: 20, unit: "千克" },
    { num: 30, unit: "只" },
  ])
);

如果是小白,那就详细一点
大致分两步,先归类后处理
把原理搞清楚了再合理简写就行

function fn(a){
    //效率比obj高太多
    let map=new Map()
    let arr=[]
    //数据归类
    a.forEach(item=>{
      if(map.get(item.unit)){
          map.set(item.unit,map.get(item.unit)+item.num)          
      }else{
          map.set(item.unit,item.num)  
      }
    })
    //数据处理
    for(let i of map){
        arr.push(`${i[1]+i[0]}`)
    }
    //输出
    return arr.join('+')
}
var data = [
    {num: 10, unit: '千克'},
    {num: 20, unit: '个'},
    {num: 20, unit: '千克'},
    {num: 30, unit: '只'},
];
var ums = data.reduce((res,item) => {
    res[item.unit] = (res[item.unit]||0)+item.num;
    return res;
}, {})

Object.entries(ums).map(([u,n])=> n + u).join('+')

你的例子数据中有4组,期望结果只有3个,少的一个怎么处理?
这个不同,可能是不同的处理哦!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题