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

时间:2020-10-03 09:47:13

标签: javascript object

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

const a = {};
// year, month, date is a variable
a[year][month][date] = some data; 

除非我在分配日期密钥之前先分配了yearmonth,否则我不知道上面的内容,

但是我是通过编程方式分配的,所以我不能做类似的事情

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

像这样

将值分配给未定义键的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

没有简单的方法可以做到这一点。

您需要这样做:

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;
}

用法:

setByPath(a, 'year.month.date', 'some data');

请注意,此功能仅作为示例,在某些情况下可能会引起问题。这是为了表明想法。

答案 1 :(得分:0)

您可以迭代键而无需最后一个键来分配值。

const 
    assign = (object, [...keys], value) => {
        const last = keys.pop();
        keys.reduce((o, k) => o[k] ??= {}, object)[last] = value
    },
    a = {};

assign(a, [2020, 10, 3], 42);

console.log(a);