使用数组向对象添加属性

时间:2019-11-18 00:06:48

标签: javascript arrays mapping

如何使用数组对象的键将多个属性添加到ES6中的子对象?

我有这个:

const data = [{
    id: 'abc-test',
  },
  {
    id: 'xyz-test',
  },
];




const t = {
  a: {
    filters: {
      tOne: [],
    }
  }

};

结果应如下所示:

const t = {
  a: {
    filters: {
      tOne: [],
      'abc-test': [],
      'xyz-test': [],
    }
  }

};

我尝试过的

...data.map((el) => [el.id]),

如何解决?我知道可以通过使用.forEach来完成,但是我想尽可能使用另一个ES6 Array.prototype函数。

2 个答案:

答案 0 :(得分:1)

我将结合使用reduce和散布运算符。

const data = [{
    id: 'abc-test',
  },
  {
    id: 'xyz-test',
  },
];

const t = {
  a: {
    filters: {
      tOne: [],
    }
  }

};

const newKeys = data.reduce((acc, el) => {
  acc[el.id] = [];
  return acc;
}, {});

t.a.filters = {
  ...t.a.filters,
  ...newKeys
};

console.log(t);

答案 1 :(得分:1)

forEach是一个Array函数(或者您喜欢称之为:Array.prototype函数)。在所有其他Array函数中,forEach最适合您的需求。其他的还有其他用途。

因此,只需使用forEach遍历数组中的对象并将属性直接分配给t.a.filters

data.forEach(o => t.a.filters[o.id] = []);

示例:

const data = [ { id: 'abc-test' }, { id: 'xyz-test' } ];

const t = { a: { filters: { tOne: [] } } };

data.forEach(o => t.a.filters[o.id] = []);

console.log(t);