gpt4 book ai didi

javascript - 从对象日期数组中分离出月份,并根据日期对应的月份进行分类

转载 作者:行者123 更新时间:2023-11-30 20:14:59 24 4
gpt4 key购买 nike

let dates = {
'2018/07/25': [['r','red'], ['b','blue']],
'2018/07/26': [['a','apple'], ['o','orange']],
'2018/08/01': [['d','deer'], ['l','lion']]
}

预期的 newObject 是:

newObject = {
'2018/07':{
'2018/07/25': [['r','red'], ['b','blue']],
'2018/07/26': [['a','apple'], ['o','orange']]
},
'2018/08':{
'2018/08/01': [['d','deer'], ['l','lion']]
}

到目前为止我的代码:

let newObject = {};

Object.keys(dates).forEach((onedate, index) => {
let monthdate = onedate.slice(0,7)
newObject[monthdate] = {[onedate] : [...dates[onedate]]};
});

以上代码的输出:

newObject = {
'2018/07':{
'2018/07/26': [['a','apple'], ['o','orange']]
},
'2018/08':{
'2018/08/01': [['d','deer'], ['l','lion']]
}

最后一个日期覆盖同一个循环中的上层对象

是否可以在单个循环函数中执行此操作?我必须使用 Sets 吗?

最佳答案

我会使用 Array.reduce 来构建最终对象。

var dates = {
'2018/07/25': [
['r', 'red'],
['b', 'blue']
],
'2018/07/26': [
['a', 'apple'],
['o', 'orange']
],
'2018/08/01': [
['d', 'deer'],
['l', 'lion']
]
}

var result = Object.keys(dates).reduce((mem, cur) => {
var key = cur.slice(0, 7);
mem[key] = { ...(mem[key] || {}),
[cur]: dates[cur]
};
return mem;
}, {});

console.log(result);

您的代码没有产生正确的结果,因为您在添加新属性时忘记合并属性。看,当您执行 { [onedate] : [...dates[onedate]] } 时,您需要像我在下面所做的那样合并旧条目。

newObject[monthdate] = {...newObject[monthdate], [onedate] : [...dates[onedate]]};

修复后的代码:

var dates = {
'2018/07/25': [
['r', 'red'],
['b', 'blue']
],
'2018/07/26': [
['a', 'apple'],
['o', 'orange']
],
'2018/08/01': [
['d', 'deer'],
['l', 'lion']
]
}

var newObject = {};

Object.keys(dates).forEach((onedate, index) => {
var monthdate = onedate.slice(0, 7)
newObject[monthdate] = { ...newObject[monthdate],
[onedate]: [...dates[onedate]]
};
});

console.log(newObject)

关于javascript - 从对象日期数组中分离出月份,并根据日期对应的月份进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52010918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com