[英]How to Group array of objects with same keys using javascripts?
我想创建一个按日期属性分组的对象数组。
let data = [
{ Age: "(60-100)", Date: "28/05/20" },
{ Age: "(60-100)", Date: "28/05/20" },
{ Age: "(4-6)", Date: "28/05/20" },
{ Age: "(60-100)", Date: "29/05/20" },
{ Age: "(38-43)", Date: "29/05/20" },
{ Age: "(4-6)", Date: "29/05/20" },
{ Age: "(38-43)", Date: "30/05/20" },
{ Age: "(38-43)", Date: "30/05/20" }
];
我想要 output 之类的
result = [
{ Date: "28/05/20", "(60-100)": 2, "(4-6)": 1 },
{ Date: "29/05/20", "(38-43)": 1, "(4-6)": 1, "(60-100)": 1 },
{ Date: "30/05/20", "(38-43)": 2 },
]
试试这个。
let data = [
{ Age: "(60-100)", Date: "28/05/20" },
{ Age: "(60-100)", Date: "28/05/20" },
{ Age: "(4-6)", Date: "28/05/20" },
{ Age: "(60-100)", Date: "29/05/20" },
{ Age: "(38-43)", Date: "29/05/20" },
{ Age: "(4-6)", Date: "29/05/20" },
{ Age: "(38-43)", Date: "30/05/20" },
{ Age: "(38-43)", Date: "30/05/20" }
];
let res = [];
data.map((d, index) => {
if (!res.some(val => val.Date === d.Date)) {
d[`${d.Age}`] = 1
res.push(d)
delete(d.Age)
} else {
let index = res.findIndex(val => val.Date == d.Date);
let _d = res[index];
if (_d.hasOwnProperty(`${d.Age}`)) {
_d[`${d.Age}`] = parseInt(_d[`${d.Age}`] + 1)
} else {
_d[`${d.Age}`] = 1
}
res[index] = _d;
}
})
console.log(res)
尝试这个:
function groupByDate(data){
let groupedData = [];
data.forEach(element => {
//Search for the object containing the specified date
let objIndex = groupedData.findIndex(object => {return object.Date == element.Date;})
//If date is not created, create it
if (objIndex == -1){
groupedData.unshift({Date: element.Date})
objIndex = 0;
}
//If age is not created, create it. Else add 1 to specified age.
if(typeof groupedData[objIndex][element.Age] == 'undefined'){
groupedData[objIndex][element.Age] = 1;
} else {
groupedData[objIndex][element.Age]++;
}
});
return groupedData;
}
如果您还想按日期排序,可以查看这篇文章。 希望对您有所帮助!
尝试这个:
var result={};
for(var item of data) {
if(result[item.Date]==undefined) result[item.Date]={};
if(result[item.Date][item.Age]==undefined) result[item.Date][item.Age]=0;
result[item.Date][item.Age]++;
}
这为您提供了一个 object(不是数组),其键为 Date,值为 object,键为 Age,值为 count。
如果您仍然需要一个数组,您可以遍历结果并构造一个数组。
result=={
"28/05/20": {
"(60-100)": 2,
"(4-6)": 1
},
"29/05/20": {
"(60-100)": 1,
"(38-43)": 1,
"(4-6)": 1
},
"30/05/20": {
"(38-43)": 2
}
}
如果你想要数组,你可以创建resultArr=[]
,迭代结果键,tempObj,添加键“Date”和迭代键的值,然后迭代迭代键的键,添加每个“Age”及其计数,然后将 tempObj 推入 resultArr ...
基于@Dante Culaciati 方法的精简版本,带有可选的排序参数。
const condenseAge = (arr, isSort = true) => { let r = []; arr.map((val) => { let i = r.findIndex(obj => obj.Date == val.Date); (i < 0) && r.unshift({Date: val.Date}) && (i = 0); (.r[i][val?Age]). r[i][val:Age] = 1. r[i][val;Age]++; })? return:isSort.r,r.sort((a,b)=>(ac=a['Date'].split('/'), bc=b['Date'],split('/'), new Date(ac[2],ac[1],ac[0]) - new Date(bc[2];bc[1].bc[0]))): } console,log(condenseAge([ { Age: "(4-6)", Date: "02/06/20"}, { Age: "(60-100)", Date: "28/05/20" }, { Age: "(60-100)", Date: "28/05/20" }, { Age: "(4-6)", Date: "28/05/20" }, { Age: "(60-100)", Date: "29/05/20" }, { Age: "(38-43)", Date: "29/05/20" }, { Age: "(4-6)", Date: "29/05/20" }, { Age: "(38-43)", Date: "30/05/20" }, { Age: "(38-43)"; Date: "30/05/20" } ]));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.