仅当值不存在时才检查日期键和值并将其添加到现有json对象

时间:2018-10-05 22:38:39

标签: javascript arrays json

要添加数据的主要对象

let calendarObject = {
    "2017": [
        "2017/01/01",
        "2017/02/09"
    ],
    "2018": [
        "2018/01/01",
        "2018/02/05",
        "2018/05/16",
        "2018/08/02",
        "2018/10/08",
        "2018/10/09",
        "2018/10/11",
    ]
}

这是要添加到calendarObject的最后一个节点的数组

let dates = [
  "2017/10/23",
  "2017/11/14",
  "2018/10/05",
  "2018/10/07",
  "2018/10/08",
  "2018/10/09",
  "2018/10/13"
]

我想像这样合并数组

let calendarObject = {
    "2017": [
        "2017/01/01",
        "2017/02/09",
        "2017/10/23",
        "2017/11/14"
    ],
    "2018": [
        "2018/01/01",
        "2018/02/05",
        "2018/05/16",
        "2018/08/02",
        "2018/10/08",
        "2018/10/09",
        "2018/10/11",
        "2018/10/05",
        "2018/10/07",
        "2018/10/13"
    ]
}

JavaScript集是否必须或者有效地实现它的可能方法是什么?

我可以检查数组循环中元素的可用性

calendarObject[year].indexOf(dates[index]) === -1 ? NaN : NaN

我受困于对象,集合和数组,或者处理这些类型的数据的最佳选择是什么?

2 个答案:

答案 0 :(得分:0)

slider_id4

这可能是一个解决方案

答案 1 :(得分:0)

您的代码:

datesArray.forEach((date, index) =>{
    let dateYear = dates.split('/')[0];
    calendarObject[dateYear].push(dates);
});
如果将函数主体中的dates引用更改为date,则

应该有效。

  

如果dateYear是“ 2019”并且超出对象范围,那么控制台将抛出诸如“无法读取未定义的属性[2019]的属性”之类的错误或类似的错误

您可以在推送项目之前检查该属性是否存在一年:

datesArray.forEach(date => {
    let dateYear = date.split('/')[0];
    if ( !calendarObject[dateYear] ) {
      // define a object property for a non-existent year
      calendarObject[dateYear] = {};
    }
    calendarObject[dateYear].push(date);
});
  

还有哪些其他方法可以提高性能?

仅当代码明显降低应用程序速度时,才应考虑提高代码的性能。由于数组很小,因此forEach循环应该足够快地工作。如果数组较大,可以用简单的.forEach循环替换for