问题描述
我试图将两个对象合并到1个数组中,并且必须通过它们的值链接它们。对象是“天”和“计数”,这是一天中发生的事件数的计数。
示例数据
{"Day":[3,8,9,17,18,21,25,27,30,31],"Count":[1,3,1,4,2,1]}
我可以使用以下功能做到这一点:
var data = {{loanDates.data}}; // this query has two objects,'Day' and 'Count' which is the sum of the number of events that has happened on each day.
return data.Day.map(function(day,key){
var count = test.Count[key];
return {
day,count
}
});
结果
[{"day":3,"count":1},{"day":8,"count":3},{"day":9,{"day":17,{"day":18,{"day":21,"count":4},{"day":25,"count":2},{"day":27,{"day":30,{"day":31,"count":1}]
这返回正确的东西,但是我想要一个月的所有日子。例如,假设对象中不存在该月的第10天,则需要创建第10天并将其计数设置为0。
需要结果
[{"day":1,"count":0},{"day":2,{"day":3,{"day":4,{"day":5,{"day":6,{"day":7,{"day":10,{..................},]
解决方法
我要创建一个对象,将每天从输入数据映射到其Count,然后如果它还没有键,请给它键1-31。之后,您可以使用Object.entries
将每个条目映射到数组中的值:
const input = {
"Day":[3,8,9,17,18,21,25,27,30,31],"Count":[1,3,1,4,2,1]
};
const countsByDay = {};
input.Day.forEach((day,i) => {
countsByDay[day] = input.Count[i];
});
for (let i = 0; i <= 31; i++) {
countsByDay[i] = countsByDay[i] || 0;
}
const output = Object.entries(countsByDay).map(
([day,count]) => ({ day,count })
);
console.log(output);
,
使用Array.from()
和count: 0
生成一个天数数组,传播到一个数组中,并用具有计数值的天数数组覆盖:
const data = {
"Day":[3,1]
}
const result = [
...Array.from({ length: 31 },(_,i) => ({ day: i + 1,count: 0 })),...data.Day.map((day,i) => ({ day,count: data.Count[i] }))
]
console.log(result)