与另一个数组比较后如何添加缺失对象的值?

How to add value of missing object after comparing to another array?

我有一个月份数组 (var months),我试图过滤掉并获取对象数组 (var array1) 没有的月份并添加空值属性Avg

var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

var array1 = [{Month: 'Jan', Avg: 10},{Month: 'Feb', Avg: 20},
{Month: 'May', Avg: 50},{Month: 'Jun', Avg: 60}];`

例如。 array1 的 属性 值为 Month: JanFebMayJun,但我想获取月份将缺少的月份的值添加到 属性 Avg,例如 {Month: 'Mar', Avg: 0}, {Month: 'Apr', Avg: 0}, ...,将其与 months 数组

进行比较

array1 的预期结果:

[{Month: 'Jan', Avg: 10}, {Month: 'Feb', Avg: 20}, 
{Month: 'Mar', Avg: 0}, {Month: 'Apr', Avg: 0}, 
{Month: 'May', Avg: 50}, {Month: 'Jun', Avg: 60}, 
{Month: 'Jul', Avg: 0}, {Month: 'Aug', Avg: 0},
{Month: 'Sep', Avg: 0}, {Month: 'Oct', Avg: 0}, 
{Month: 'Nov', Avg: 0}, {Month: 'Dec', Avg: 0}];

我认为这应该很管用!

var months = [
  "Jan",
  "Feb",
  "Mar",
  "Apr",
  "May",
  "Jun",
  "Jul",
  "Aug",
  "Sep",
  "Oct",
  "Nov",
  "Dec",
];

var array1 = [{
    Month: "Jan",
    Avg: 10
  },
  {
    Month: "Feb",
    Avg: 20
  },
  {
    Month: "May",
    Avg: 50
  },
  {
    Month: "Jun",
    Avg: 60
  },
];

let finalArr = [];

months.filter((e) => {
  let index = array1.findIndex((ele) => ele.Month == e);
  if (index >= 0) {
    finalArr.push(array1[index]);
  } else {
    finalArr.push({
      Month: e,
      Avg: 0
    });
  }
});

console.log(finalArr);

Array.mapArray.find

结合使用

const months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
const array1 = [{Month: 'Jan', Avg: 10},{Month: 'Feb', Avg: 20},
{Month: 'May', Avg: 50},{Month: 'Jun', Avg: 60}];

const result = months.map(m => array1.find(a => a.Month === m)??{Month: m, Avg: 0});

console.log(result);

参考:Array, Nullish