Javascript - 将数组数组转换为具有预填充值的对象数组

IT技术 javascript arrays
2021-01-19 17:29:28

我有以下数组:

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

N代表这些数组不受限制的事实,即我永远不知道我存储了多少数组。我试图做到的是,数组转换为对象的数组键latlng我预期的那么有最终结果为以下这样我就可以使用它进行进一步的需求:

[
    {
        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}
]

这不是我要找的,因为我真的需要这些lat并且lng成为对象的键。我该如何解决这样的问题?

4个回答

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

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

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

谢谢 Yeldar,它对我来说效果很好!如果您的帖子是第一个来的,我会在大约 5 分钟内接受它作为答案。
2021-03-24 17:29:28

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

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

我需要做同样的事情,但我有 arrs.map 不是一个函数
2021-03-17 17:29:28
我怎样才能做到这一点?[ { 1 : 2 } , { 3 : 4 } , { 5 : 6 } , { 7 : 8 } ]
2021-03-19 17:29:28
@fazeelzama 替换{lat, lng}{[lat]: lng}.
2021-03-20 17:29:28
2021-04-04 17:29:28
@Versifiction 您应该提出一个新问题并提供带有实际代码的详细信息。仅凭该评论绝对无法知道您在做什么。
2021-04-10 17:29:28

您可以使用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);

我需要做同样的事情,但我有 data.map 不是一个函数
2021-03-31 17:29:28

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 不是一个函数
2021-03-31 17:29:28