Javascript直接建立物件

时间:2019-07-17 08:16:05

标签: javascript object

我具有以下值:

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;

我的猜测是,有一种更好的方法,也许可以一步一步创建这样的对象,而不是三步。

4 个答案:

答案 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'
    }
  }
};

如果已经定义了xy,则使用计算的属性:

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