Javascript 有没有较短的路

Javascript 有没有较短的路,javascript,json,Javascript,Json,我编写了以下代码片段来生成一个对象 { "2018": { "02": { "18": { "scheduledSlots": 0, "totalSlots": 0, "slots": null } } } } 这感觉是不对的 const obj = {} obj[date[2]]

我编写了以下代码片段来生成一个对象

{
    "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
            }
        }
    }
}

如果一次创建整个对象,可能需要使用:

或者如果您以后需要访问
施工日

const day = {
    scheduledSlots: 0,
    totalSlots: 0,
    slots: null
}
const obj = {
    [date[2]]: {
        [date[1]]: {
            [date[0]]: day
        }
    }
}
@如果需要迭代,请编辑,这样可以完成以下工作:

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
}

如果一次创建整个对象,可能需要使用:

或者如果您以后需要访问
施工日

const day = {
    scheduledSlots: 0,
    totalSlots: 0,
    slots: null
}
const obj = {
    [date[2]]: {
        [date[1]]: {
            [date[0]]: day
        }
    }
}
@如果需要迭代,请编辑,这样可以完成以下工作:

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
}

您可以通过提供值属性的路径来使用组合方法

函数设置值(对象、路径、值){
var last=path.pop();
reduce((o,k)=>o[k]=o[k]| |{},object)[last]=value;
}
变量对象={},
日期='2018年2月18日'。拆分('-')。反向();
setValue(对象,[…日期,'scheduledlots'],0);
setValue(对象,[…日期,'totalSlots'],0);
setValue(对象,[…日期,'插槽'],null);
console.log(对象)

.as console wrapper{max height:100%!important;top:0;}
您可以通过提供值属性的路径来使用组合方法

函数设置值(对象、路径、值){
var last=path.pop();
reduce((o,k)=>o[k]=o[k]| |{},object)[last]=value;
}
变量对象={},
日期='2018年2月18日'。拆分('-')。反向();
setValue(对象,[…日期,'scheduledlots'],0);
setValue(对象,[…日期,'totalSlots'],0);
setValue(对象,[…日期,'插槽'],null);
console.log(对象)

.as console wrapper{max height:100%!important;top:0;}
您为什么要使用如此复杂的数据结构?@RomeoSierra这是用于填充calendar@boyman这是如何减少代码线的呢?拥有“2018:02:18”这样的键更好,不是吗?我的意思是,想象一下你正在遍历这个数据结构!我明白你的意思了。我看到的问题是,你们把这件事搞得太复杂了。将
“2018:02:18”
的键解码为您想要的任何内容,在编程上要比尝试遍历如此复杂的结构简单得多。你可以用一个更平坦的数据结构来实现你的目标。你为什么会有这么复杂的数据结构?@RomeoSierra这是一个填充数据结构的哈希图calendar@boyman这是如何减少代码线的呢?拥有“2018:02:18”这样的键更好,不是吗?我的意思是,想象一下你正在遍历这个数据结构!我明白你的意思了。我看到的问题是,你们把这件事搞得太复杂了。将
“2018:02:18”
的键解码为您想要的任何内容,在编程上要比尝试遍历如此复杂的结构简单得多。您可以使用更平坦的数据结构来实现目标。当我必须向哈希映射添加新日期时,这将不起作用,上一个状态将为overwritten@ShubhamBhardwaj完全忘记了。编辑我的回答当我必须向哈希映射添加新日期时,这将不起作用,上一个状态将为overwritten@ShubhamBhardwaj完全忘记了。编辑了我的答案