部分展平JavaScript对象

时间:2017-11-14 13:47:22

标签: javascript

我有一个我从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'
  }
}]

我遇到的对象展平函数的其他示例似乎产生了一个单级数组(完全删除了对象),而我需要保留单个对象,但是它们内部的数据必须在一个级别上。

非常感谢任何帮助!

2 个答案:

答案 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,
  }
});