我有一个我从API无法修改的JavaScript对象。我想在工具中使用这些数据,但该工具只接受存储在对象根级别的值,例如我不能使用点表示法来访问关键级别的值。
根据下面的示例,我希望能够访问shape.colour
,但是通过引用来自新的JSON对象的shape__colour
之类的东西。
示例起始对象:
[{
"id" : 12345,
"size" : 40,
"shape": {
"colour" : 'yellow',
"dimension" : '2D'
}
},
{
"id" : 12346,
"size" : 50,
"shape": {
"colour" : 'blue',
"dimension" : '3D'
}
}]
我需要它看起来像:
[{
"id" : 12345,
"size" : 40,
"shape__colour": 'yellow',
"shape__dimension" : '2D;'
}
},
{
"id" : 12346,
"size" : 50,
"shape__colour": 'blue',
"shape__dimension" : '3D'
}
}]
我遇到的对象展平函数的其他示例似乎产生了一个单级数组(完全删除了对象),而我需要保留单个对象,但是它们内部的数据必须在一个级别上。
非常感谢任何帮助!
答案 0 :(得分:3)
另一个map
函数:
const result = arr.map(
({shape, ...rest}) => ({ shape__colour: shape.colour, shape__dimension: shape.dimension, ...rest })
);
或者如果shape具有动态属性:
const result = arr.map(
({shape, ...rest}) => Object.assign(rest, ...Object.keys(shape).map(key => {["shape__"+key] : shape[key]}))
);
答案 1 :(得分:2)
您可以使用map
返回具有展平形状属性的新数组:
let result = arr.map(({id, size, shape}) => {
return {
id,
size,
shape_colour: shape.colour,
shape_dimension: shape.dimension
}
});
注意:您还可以在参数列表中解构形状对象:
let result = arr.map(({
id,
size,
shape: { colour: shape_colour, dimension: shape_dimension }
}) => {
return {
id,
size,
shape_colour,
shape_dimension,
}
});