将两个对象值与值链接起来,并填充序列中的所有缺失值

问题描述

我试图将两个对象合并到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)