我编写了以下代码片段来生成对象。
{
"2018": {
"02": {
"18": {
"scheduledSlots": 0,
"totalSlots": 0,
"slots": null
}
}
}
}
这感觉错误的方式
const obj = {}
obj[date[2]] = {};
obj[date[2]][date[1]] = {};
obj[date[2]][date[1]][date[0]] = {};
const day = obj[date[2]][date[1]][date[0]];
day.scheduledSlots = 0;
day.totalSlots = 0;
day.slots = null;
我只需要知道是否有更好的方法来解决这个问题
这是一张哈希图 它需要再添加一天。
{
"2018": {
"02": {
"18": {
"scheduledSlots": 0,
"totalSlots": 0,
"slots": null
}
}
"03": {
"12": {
"scheduledSlots": 0,
"totalSlots": 0,
"slots": null
}
}
}
}
答案 0 :(得分:3)
如果您一次创建整个对象,可能需要使用literal notation:
const obj = {
[date[2]]: {
[date[1]]: {
[date[0]]: {
scheduledSlots: 0,
totalSlots: 0,
slots: null
}
}
}
}
或者,如果您以后需要访问const day
:
const day = {
scheduledSlots: 0,
totalSlots: 0,
slots: null
}
const obj = {
[date[2]]: {
[date[1]]: {
[date[0]]: day
}
}
}
@EDIT如果你需要迭代,那么这应该做的工作:
Object.prototype._next = function(name)
{
if(!this[name]) this[name] = {};
return this[name];
}
const obj = {}
const day = obj._next(date[2])._next(date[1])._next(date[0]) = {
scheduledSlots: 0,
totalSlots: 0,
slots: null
}
答案 1 :(得分:2)
您可以通过提供值的属性路径来使用组合方法。
function setValue(object, path, value) {
var last = path.pop();
path.reduce((o, k) => o[k] = o[k] || {}, object)[last] = value;
}
var object = {},
date = '18-02-2018'.split('-').reverse();
setValue(object, [... date, 'scheduledSlots'], 0);
setValue(object, [... date, 'totalSlots'], 0);
setValue(object, [... date, 'slots'], null);
console.log(object);

.as-console-wrapper { max-height: 100% !important; top: 0; }