簡體   English   中英

Javascript如何為未定義的對象鍵賦值?

[英]Javascript how to assign value to undefined object key?

我想以編程方式為對象中的“尚未”初始化鍵賦值,如下所示:

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

我知道除非我在分配日期鍵之前分配yearmonth ,否則上述方法不起作用,

但我以編程方式分配這個,所以我不能做類似的事情

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

用法:

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

請注意,此功能僅作為示例,在某些情況下可能會導致問題。 它是為了展示這個想法。

您可以在沒有最后一個鍵的情況下迭代鍵來分配值。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM