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