JavaScript - 将数组的数组转换为预填值的对象数组

13

我有以下数组:

[
    [val1, val2]
    [val1, val2]
    [val1, val2]
    [valN, valN]
]

N代表这些数组没有限制,也就是我不知道存储了多少个元素。我的目标是将该数组转换为具有键latlng的对象数组,我期望最终的结果如下,以便可以进一步使用:

[
  { "lat": ..., "lng": ... },
  { "lat": ..., "lng": ... },
  ...
]
[
    {
        lat: val1,
        lng: val2
    },
    {
        lat: val1,
        lng: val2
    },
    {
        lat: valN,
        lng: valN
    }
]

我找到了一个将这些内部数组转换为对象的函数,它看起来像这样:

objectify(array) {
    return array.reduce(function(result, currentArray) {
        result[currentArray[0]] = currentArray[1];
        return result;
    }, {});
}

它能够正常工作,但是输出看起来像这样:

[
    {val1: val1, val2: val2}
    {val1: val1, val2: val2}
    {valN: valN, valN: valN}
]

但这不是我要找的,因为我真的需要这些latlng成为一个对象的键。我该如何解决这个问题?

4个回答

23

您可以简单地使用Array.prototype.map通过应用投影函数将一个数组映射成另一个数组:

var arrs = [
    [1, 2],
    [3, 4],
    [5, 6],
    [7, 8]
];

var objs = arrs.map(x => ({ 
  lat: x[0], 
  lng: x[1] 
}));

/* or, using the older "function" syntax:

var objs = arrs.map(function(x) { 
  return {
    lat: x[0], 
    lng: x[1] 
  };
);

*/

console.log(objs);


谢谢你,Yeldar,它对我很好用!如果你的帖子是第一个到来的话,我会在大约5分钟内接受它作为答案。 - Michael Spiegelberg

16
使用ES6,你可以以非常简洁的方式编写此代码:

var arrs = [
    [1, 2],
    [3, 4],
    [5, 6],
    [7, 8]
];
const locations = arrs.map(([lat, lng]) => ({lat, lng}));
console.log(locations);


我该如何让它变成这样? [ { 1 : 2 } , { 3 : 4 } , { 5 : 6 } , { 7 : 8 } ] - Fazeel Qureshi
1
@fazeelzama 将 {lat, lng} 替换为 {[lat]: lng} - str
我需要做同样的事情,但是我的arrs.map不是一个函数。 - VersifiXion
@Versifiction 你应该提出一个新问题,并提供具体的代码细节。仅凭那个简短的评论是无法知道你在做什么的。 - str
这是我的话题 https://stackoverflow.com/questions/60999060/convert-oracle-query-output-to-json-oracle-nodejs - VersifiXion

1
你可以使用 Array#map 来实现这个功能。Array#map 会将每个数组元素通过一个投影函数,并返回一个新的数组。

var data= [
    ['val1', 'val2'],
    ['val1', 'val2'],
    ['val1', 'val2'],
    ['valN', 'valN'],
];

var result = data.map(function(row) {
  return {
    lat: row[0],
    lng: row[1]
  };
});

console.log(result);


我需要做同样的事情,但是我的数据.map不是一个函数。 - VersifiXion

0

var array = [
    ['val1', 'val2'],
    ['val1', 'val2'],
    ['val1', 'val2'],
    ['valN', 'valN']
];

var arrayObject = array.map(function(item){ 
  return { lat: item[0], lng: item[1]};
});

console.log(arrayObject);


我需要做相同的事情,但是我有"array.map is not a function"的错误。 - VersifiXion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接