我具有以下值:
let buffer = {};
let value = 'value';
let x = 1;
let y = 2;
这就是我想要做的:
buffer[x][y].value = value;
这是我需要做的,才能使其正常工作:
buffer[x] = {};
buffer[x][y] = {};
buffer[x][y].value = value;
我的猜测是,有一种更好的方法,也许可以一步一步创建这样的对象,而不是三步。
答案 0 :(得分:5)
我的猜测是,有一种更好的方法,也许可以一步一步创建这样的对象,而不是三步。
您所拥有的很好,但是您也可以使用计算属性(我假设您需要变量中的值)和简写属性表示法(对于value
):
let value = 'value';
let x = 1;
let y = 2;
let buffer = {
[x]: {
[y]: {
value
}
}
};
console.log(buffer);
答案 1 :(得分:2)
如果要基于一组键创建嵌套对象,则可以使用reduceRight
。使用rest parameters syntax获取值和路径数组作为单独的变量。将value
设置为initialValue
参数,并在每次迭代中添加嵌套级别
const create = (value, ...paths) => paths.reduceRight((r, k) => ({ [k]: r }), value)
console.log(create("final value", "1", "2", "value"))
console.log(create("final value", "any", "number", "of", "keys"))
答案 2 :(得分:1)
喜欢吗?
const buffer = {
1: {
2: {
value: 'value'
}
}
};
如果已经定义了x
和y
,则使用计算的属性:
let x = 1;
let y = 2;
const buffer = {
[x]: {
[y]: {
value: 'value'
}
}
};
答案 3 :(得分:1)
您可以减少给定的键并在最后一步分配值。
const
setValue = (object, path, value) =>
path.reduce((o, k, i, { length }) => o[k] = i + 1 === length
? value
: o[k] || {}, object);
let buffer = {};
let value = 'value';
let x = 1;
let y = 2;
setValue(buffer, [x, y, value], value);
console.log(buffer);