如何在javascript中计算数组对象的唯一值
我想计算唯一值的数量,并将其放入新数组中。 我有以下资料:如何在javascript中计算数组对象的唯一值,javascript,arrays,array-push,Javascript,Arrays,Array Push,我想计算唯一值的数量,并将其放入新数组中。 我有以下资料: [ { CategoryId: "b5c3f43f941c", CategoryName: "Category 1", CategoryColor: "cgreen" } { CategoryId: "9872cce5af92", CategoryName: "Category 2", CategoryColor: "purple" } { CategoryId: "b5c3f43f941c", CategoryName:
[
{ CategoryId: "b5c3f43f941c", CategoryName: "Category 1", CategoryColor: "cgreen" }
{ CategoryId: "9872cce5af92", CategoryName: "Category 2", CategoryColor: "purple" }
{ CategoryId: "b5c3f43f941c", CategoryName: "Category 1", CategoryColor: "cgreen" }
]
我想要具有以下结果的新阵列:
[
{ CategoryId: "b5c3f43f941c", count: 2, CategoryColor: "cgreen" }
{ CategoryId: "9872cce5af92", count: 1, CategoryColor: "purple" }
]
在此按id检查中,如果id相同,则在新数组中显示count和new
希望你明白我想要什么
谢谢,使用
reduce
函数并在回调中检查存在CategoryId
匹配的对象。如果匹配,则更新计数,否则使用值创建一个新对象并推入数组
设k=[{
类别ID:“b5c3f43f941c”,
类别名称:“类别1”,
类别颜色:“cgreen”
},
{
类别ID:“9872cce5af92”,
类别名称:“类别2”,
类别颜色:“紫色”
},
{
类别ID:“b5c3f43f941c”,
类别名称:“类别1”,
类别颜色:“cgreen”
}
]
让结果=k.减少(功能(acc,curr){
//检查空数组中是否存在CategoryId匹配的对象
设IselemeExist=acc.findIndex(函数(项){
return item.CategoryId==curr.CategoryId;
})
如果(IsElemeExist===-1){
设obj={};
obj.CategoryId=当前类别ID;
obj.count=1;
obj.CategoryColor=curr.CategoryColor;
附件推送(obj)
}否则{
acc[IsElemeExist]。计数+=1
}
返回acc;
}, [])
console.log(result)
您可以使用“for..of”在数组中循环,并创建一个临时对象来保存每个循环中的数据。如果tempObject中存在相同的id,则将计数增加1
var-arr=[
{类别ID:“b5c3f43f941c”,类别名称:“类别1”,类别颜色:“cgreen”}
,{类别ID:“9872cce5af92”,类别名称:“类别2”,类别颜色:“紫色”}
,{类别ID:“b5c3f43f941c”,类别名称:“类别1”,类别颜色:“cgreen”}
]
var tempResult={}
对于(arr的{CategoryColor,CategoryId})
tempResult[CategoryId]={
类别,
类别颜色,
计数:tempResult[CategoryId]?tempResult[CategoryId]。计数+1:1
}
让结果=对象值(tempResult)
console.log(result)
您可以先对数组进行排序,然后对重复项进行计数。缺点是,由于排序的原因,它会修改原始的yourArray
,因此请谨慎使用
yourArray.sort((a, b) => {
if (a.CategoryName > b.CategoryName) {
return 1;
}
if (a.CategoryName < b.CategoryName) {
return -1;
}
return 0;
});
var pivot = yourArray[0];
pivot.count = 0;
var counted = [pivot];
yourArray.forEach(item => {
if (item.CategoryId === pivot.CategoryId) {
pivot.count++;
} else {
pivot = item;
pivot.count = 1;
counted.push(pivot);
}
});
yourArray.sort((a,b)=>{
如果(a.CategoryName>b.CategoryName){
返回1;
}
if(a.CategoryName{
如果(item.CategoryId==pivot.CategoryId){
pivot.count++;
}否则{
枢轴=项目;
pivot.count=1;
推(枢轴);
}
});
yourArray.sort((a, b) => {
if (a.CategoryName > b.CategoryName) {
return 1;
}
if (a.CategoryName < b.CategoryName) {
return -1;
}
return 0;
});
var pivot = yourArray[0];
pivot.count = 0;
var counted = [pivot];
yourArray.forEach(item => {
if (item.CategoryId === pivot.CategoryId) {
pivot.count++;
} else {
pivot = item;
pivot.count = 1;
counted.push(pivot);
}
});