如何根据另一个对象数组的键形成一个对象?

时间:2021-05-31 07:19:00

标签: javascript

我想根据另一个对象的键形成一个对象并将值设置为空字符串;

const availableList = [
  {id: 1, key: 'emp_id'},
  {id: 2, key: 'firstname'},
  {id: 3, key: 'lastname'},
  {id: 4, key: 'mobile'},
  {id: 5, key: 'email'},
]
    
availableList .forEach(key => result [key] = availableList [key]);

预期输出:

result = {
  emp_id: '', 
  firstname: '', 
  lastname: '', 
  mobile: '', 
  email: ''
}

4 个答案:

答案 0 :(得分:3)

您可以将 .reduce 与对象析构和对象的计算属性一起使用

const availableList = [
  { id: 1, key: "emp_id" },
  { id: 2, key: "firstname" },
  { id: 3, key: "lastname" },
  { id: 4, key: "mobile" },
  { id: 5, key: "email" },
]

const res = availableList.reduce(
  (finalObj, iteratedObj) => ({ ...finalObj, [iteratedObj.key]: "" }),
  {}
)

console.log(res)

参考资料

Array.property.reduce

Spread syntax

Destructing assignment

Computed property names (ES 2015)

答案 1 :(得分:2)

如果您不太熟悉 javascript、数组和对象,最好保持简单(避免箭头函数和花哨的 es6 符号)。

一个简单的 Array#reduce 应该可以解决问题:

const availableList = [
    {id: 1, key: 'emp_id'},
    {id: 2, key: 'firstname'},
    {id: 3, key: 'lastname'},
    {id: 4, key: 'mobile'},
    {id: 5, key: 'email'},
];

var newObject = availableList.reduce(function (result, item) {
  result[item.key] = '';
  return result;
}, {});

console.log(newObject);

如果您熟悉 Array#reduce 的一些评论:

  • 我命名为 result 的参数是用于将数组“缩减”为单个变量的值。
  • 我命名为 item 的参数是每次迭代期间数组项的值。
  • result 的原始值是指定为 reduce 的第二个参数的值(在本例中为 {}
  • 在传递给 reduce 的函数内部,您必须返回将在下一次迭代中作为 result 参数传入的值
  • 因此,在每次迭代中,您都会获得包含您在该点之前添加的键的对象,添加另一个值为空字符串的键,然后返回它,以便它可以用于下一次迭代。< /li>
  • 一旦完成迭代,它将返回最后一个值,该值由内部函数返回。该值被分配给变量 newObject

答案 2 :(得分:1)

您有一组属性。因此,正如您在问题中所建议的,您需要使用 forEach 来迭代所有项目。在这种情况下,项目是对象。因此,您只需编写 obj.property 即可访问它们的所有属性。

让我们看看如何向对象添加属性。 我可以这样做:

obj.property5 = 'something'

或者我可以这样做:

obj['property5'] = 'something'

由于您有一些不可预测的属性名称,因此您应该使用第二个名称。 代码如下:

var secondObject = {};

availableList.forEach(function(item, index) {
  secondObject[item.key] = '';
});

答案 3 :(得分:1)

这是我对 Object.fromEntries() 的看法:

const availableList = [
  { id: 1, key: "emp_id" },
  { id: 2, key: "firstname" },
  { id: 3, key: "lastname" },
  { id: 4, key: "mobile" },
  { id: 5, key: "email" },
];

const result = Object.fromEntries(availableList.map((item) => [item.key, ""]))

console.log(result);