【问题标题】:How to add value of missing object after comparing to another array?与另一个数组比较后如何添加缺失对象的值?
【发布时间】:2021-12-24 19:40:04
【问题描述】:

我有一个月份数组 (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,但我想获取缺少的月份并将值 0 添加到属性 Avg 中,例如 @987654332 @ 用于将其与 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}];

【问题讨论】:

    标签: javascript arrays object javascript-objects


    【解决方案1】:

    我认为这应该很有效!

    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);

    【讨论】:

    • 感谢您的回复@AkshayBalwani!所有月份的 finalArr 的结果是 Avg: 0
    【解决方案2】:

    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);

    参考:ArrayNullish

    【讨论】:

    • 感谢您的回复@ProGu!感谢您的帮助,它适用于我的程序。但是我是一个Javascript初学者,如何将函数转回传统的回调函数和双问号以便我理解?
    • @JACK 添加了指向数组和空值合并运算符的参考链接
    • 感谢您的帮助!
    猜你喜欢
    • 2020-08-28
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 2015-05-23
    • 2021-05-30
    相关资源
    最近更新 更多