[英]Javascript how to assign value to undefined object key?
我想以编程方式为对象中的“尚未”初始化键赋值,如下所示:
const a = {};
// year, month, date is a variable
a[year][month][date] = some data;
我知道除非我在分配日期键之前分配year
和month
,否则上述方法不起作用,
但我以编程方式分配这个,所以我不能做类似的事情
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.