有类似数组
[
{num: 10, unit: '千克'},
{num: 20, unit: '个'},
{num: 20, unit: '千克'},
{num: 30, unit: '只'},
]
最后显示成 30千克+20个+30只
有类似数组
[
{num: 10, unit: '千克'},
{num: 20, unit: '个'},
{num: 20, unit: '千克'},
{num: 30, unit: '只'},
]
最后显示成 30千克+20个+30只
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('+')
13 回答12.6k 阅读
2 回答4.9k 阅读✓ 已解决
7 回答1.8k 阅读
9 回答1.6k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
7 回答2k 阅读
5 回答613 阅读