如何在JavaScript中使用特定键将数组转换为对象

时间:2019-03-13 09:15:30

标签: javascript

我有一个很大的数组,格式如下

 [
    { 
      id: '1', 
      name: "bloh", 
      coordinates: [[51.3888562, 35.7474398], [51.388671,35.7470575],[51.3887346, 35.7470375]]
    },
    {
      id: '2', 
      name: "blohbloh",
      coordinates:  [[51.3888562, 35.7474398],[51.3822271, 35.7444575]]
    }
 ]

我想将所有元素的坐标属性格式转换为以下格式

{
   id: '1',
   name: "bloh",
   coordinates:[{longitude:51.3888562,latitude: 35.7474398},{longitude:51.3887346,latitude: 35.7470375}]
},

{
   id: '2', 
   name: "blohbloh", 
   coordinates:[{longitude:51.3888562,latitude: 35.7474398},{longitude:51.3822271,latitude: 35.7444575}]
}

4 个答案:

答案 0 :(得分:2)

您应该可以通过map做到这一点:

let input = [{id: '1', name: "bloh", coordinates:  [[51.3888562, 35.7474398], [51.388671,35.7470575],[51.3887346, 35.7470375]]},{id: '2', name: "blohbloh",coordinates:  [[51.3888562, 35.7474398],[51.3822271, 35.7444575]]}];

let result = input.map(({id, name, coordinates}) => {
  return { id, name, coordinates: coordinates.map(([latitude,longitude]) => { return { latitude, longitude}})};
});

console.log("Result: ", result);

答案 1 :(得分:1)

您可以遍历数组,然后需要使用map将坐标的表示形式从数组更改为对象。

您可以使用以下代码进行转换。

var arr=[{id: '1', name: "bloh", coordinates:  [[51.3888562, 35.7474398], [51.388671,35.7470575],[51.3887346, 35.7470375]]},{id: '2', name: "blohbloh",coordinates: [ [51.3888562, 35.7474398],[51.3822271, 35.7444575]]}];
arr.forEach(elm=>elm.coordinates=elm.coordinates.map(c=>({longitude:c[0],latitude:c[1]})));
console.log(arr);

答案 2 :(得分:1)

您可以使用两个map()destructuring将顶级对象的所有属性复制到rest变量中,然后将坐标map()转换为另一种格式:

const data = [{id: '1', name: "bloh", coordinates:[[51.3888562, 35.7474398], [51.388671,35.7470575],[51.3887346, 35.7470375]]},{id: '2', name: "blohbloh",coordinates:[[51.3888562, 35.7474398],[51.3822271, 35.7444575]]}];

const result = data.map(({ coordinates, ...rest }) =>
  ({
    ...rest,
    coordinates: coordinates.map(([longitude, latitude]) => ({ longitude, latitude }))
  })
);
  
console.log(result);

答案 3 :(得分:0)

在遇到任何类型的问题时,首先,您应该了解您需要做什么,而更漂亮的数据将始终帮助您实现这一目标。

您要转换为:

const original = [{
  id: '1',
  name: "bloh",
  coordinates: [ [51.3888562, 35.7474398],
               [51.388671,35.7470575],
               [51.3887346, 35.7470375] ]
 },
 {
  id: '2',
  name: "blohbloh",
  coordinates:  [ [51.3888562, 35.7474398],
                [51.3822271, 35.7444575] ]
 }
]

对此:

{
  id: '1',
  name: "bloh",
  coordinates:[
    {longitude:51.3888562,latitude: 35.7474398},
    {longitude:51.3887346,latitude: 35.7470375}
   ]
},
{
  id: '2',
  name: "blohbloh",
  coordinates:[
    {longitude:51.3888562,latitude: 35.7474398},
    {longitude:51.3822271,latitude: 35.7444575}
   ]
}

我们将使用“ for”循环,因为根据我个人的观点,它更容易看到正在发生的事情。

for(i in original){
  original[i].coordinates = original[i].coordinates.map(item => {return {
    latitude: item[0], 
    longitude: item[1]}
    })
}

console.log(JSON.stringify(original))

您可以使用修饰词以更漂亮的方式查看数据,例如,使用以下资源:https://jsonformatter.curiousconcept.com/

希望这会有所帮助。