让我们说我有一个带有不同键的对象列表,其中之一是名称。
var resulttemp = [{name: "HYD. CYLINDER"}, {name: "pelle"}, {name: "HYD. CYLINDER"}, {name: "1212"}, {name: "pelle"}]
最终结果应该是:
var uniquePartNamesWithCount = [{name: "HYD. CYLINDER", count: 2}, {name: "pelle", count: 2}, {name: "1212", count: 1}]
我知道如何将唯一名称推入数组,但是如何设法添加计数器?
答案 0 :(得分:4)
一种解决方案是使用Array.reduce()生成一个对象,该对象将保存每个名称以及与之相关的计数器。最后,您可以使用Object.values()来获取所需的数组。
var input = [
{name: "HYD. CYLINDER"},
{name: "pelle"},
{name: "HYD. CYLINDER"},
{name: "1212"},
{name: "pelle"}
];
let res = input.reduce((acc, {name}) =>
{
acc[name] = acc[name] || ({name, count: 0});
acc[name].count++;
return acc;
}, {});
console.log(Object.values(res));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
如果您需要按计数器排序的最终数组,则可以执行以下操作:
console.log( Object.values(res).sort((a, b) => b.count - a.count) );
答案 1 :(得分:2)
这就是您想要的:
// Declarations
var resulttemp = [
{name: "HYD. CYLINDER"},
{name: "pelle"},
{name: "HYD. CYLINDER"},
{name: "1212"},
{name: "pelle"}
];
const counts = {}
const uniquePartNamesWithCount = []
// Get sums
for (let obj of resulttemp){
if(counts[obj.name]){ counts[obj.name]++;}
else{counts[obj.name] = 1 }
}
// Add objects to final array
const keys = Object.keys(counts);
for(let key of keys){
let obj = {};
obj[key] = counts[key];
uniquePartNamesWithCount.push(obj);
}
// Print results
console.log(uniquePartNamesWithCount);