所以,这是我的对象:
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
}
}
我在做什么错了?
谢谢。
答案 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
}
}