Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript如何为未定义的对象键赋值?_Javascript_Object - Fatal编程技术网

Javascript如何为未定义的对象键赋值?

Javascript如何为未定义的对象键赋值?,javascript,object,Javascript,Object,我想通过编程方式将值分配给对象中“尚未”初始化的键,如下所示: const a = {}; // year, month, date is a variable a[year][month][date] = some data; 我知道,除非我在指定日期键之前指定年和月,否则上述操作将不起作用 但我是按程序分配的,所以我不能做类似的事情 a:{ 2020:{ 10:{ 3: some data } } } 像这样 给未定义的键赋值的最佳方法是什么?没有

我想通过编程方式将值分配给对象中“尚未”初始化的键,如下所示:

const a = {};
// year, month, date is a variable
a[year][month][date] = some data; 
我知道,除非我在指定日期键之前指定
,否则上述操作将不起作用

但我是按程序分配的,所以我不能做类似的事情

a:{
  2020:{
    10:{
      3: some data
    }
  }
}

像这样


给未定义的键赋值的最佳方法是什么?

没有简单的方法

您需要这样做:

a[year] = {}
a[year][month] = {}
a[year][month][date] = 'some data';
您可以使用以下功能:

function setByPath(obj, path, value) {
    var parts = path.split('.');
    var o = obj;
    if (parts.length > 1) {
      for (var i = 0; i < parts.length - 1; i++) {
          if (!o[parts[i]])
              o[parts[i]] = {};
          o = o[parts[i]];
      }
    }

    o[parts[parts.length - 1]] = value;
}

请注意,此函数仅作为示例,在某些情况下可能会导致问题。这是为了展示这个想法。

您可以迭代键,而无需最后一个键来赋值

const
赋值=(对象,[…键],值)=>{
const last=keys.pop();
keys.reduce((o,k)=>o[k]??={},object)[last]=value
},
a={};
分配(a,[2020,10,3],42);

控制台日志(a)“给未定义的键赋值的最佳方法是什么?”->“…除非我在指定日期键之前指定了年份和月份,”谢谢,我想像您一样先指定以前的键,但代码看起来不整洁,因此问了一个问题。我想我没有别的办法了。顺便说一句,虽然我将a声明为
常量
,但由于我直接赋值给a的属性,所以我仍然可以更改其值。我猜你错了?没错,我错了,我删除了那条旁白。你可以这样做。
setByPath(a, 'year.month.date', 'some data');