Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中计算数组对象的唯一值_Javascript_Arrays_Array Push - Fatal编程技术网

如何在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);
  }
});