要添加数据的主要对象
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
我受困于对象,集合和数组,或者处理这些类型的数据的最佳选择是什么?
答案 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
。