如何根据这些属性构造一个新对象?

时间:2018-11-21 13:46:15

标签: javascript arrays object reduce

所以,这是我的对象:

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
   } 
}

我在做什么错了?

谢谢。

3 个答案:

答案 0 :(得分:1)

您正在混合数组和对象。如果我理解正确,那么您想要的是这样:

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的对象将覆盖先前的条目。

答案 1 :(得分:0)

Reduce me hod是在数组上调用的。 在您的情况下,数组中只有一个对象。 所以'0'代表'[@index]',而您唯一的cild对象被映射到'curr'

答案 2 :(得分:-1)

您可以尝试使用forEach而不是reduce,如下所示

let retData = {};


data.forEach(({ main, second }) => {
retData[main] = {second};
});

在这种情况下,输出为:

retData = {
 7: {
      second: 2
    }
}