首页 > 解决方案 > 如何从这些属性中构造一个新对象?

问题描述

所以,这是我的目标:

const data = [ { 
    main: 7,
    second: 2
    otherData: 'some string'
 } ]

我需要用特定的属性创建一个新对象,所以最后它应该看起来像:

const newData = {
    7: {
     second: 2
    }
  }

我尝试使用 解决它.reduce(),但不知道如何省略某些属性。

const newData = data.reduce((obj, curr, index) => {
  return {
    ..obj, [index]: curr
  };
}, {});

产生:

{ '0':
   { main: 7,
     second: 3
   } 
}

我究竟做错了什么?

谢谢。

标签: javascriptarraysobjectreduce

解决方案


您将数组和对象混为一谈。如果我理解正确,你想要的是:

const newData = data.map(obj => {
  return {
    [obj.main]: {
      second: obj.second
    }
  };
});

鉴于您的样本输入

const data = [ { 
    main: 7,
    second: 2
    otherData: 'some string'
 } ];

这会回馈

[
  {
    7: {
      second: 2
    }
  }
]

从评论更新

听起来你确实想在这里减少。用这个:

const reduced = data.reduce((acc, {main, second}, index) => {
  acc[main] = {second, index};
  return acc;
}, {});

您的样本输入给出了哪个

{
  '7': {
    second: 2,
    index: 0
  }
}

请注意,正如我在下面所说的那样要小心,因为与main前一个相同的对象覆盖先前的条目。


推荐阅读