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

时间:2017-07-19 09:16:10

标签: javascript arrays

我有以下数组:

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

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

4 个答案:

答案 0 :(得分:7)

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



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




答案 1 :(得分:5)

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

答案 2 :(得分:1)

您可以使用Array#map来实现此目的。 Array#map通过投影函数传递每个数组元素,并以新数组的形式返回值。

val fp = df.select($"_1", $"_2", $"_3",$"_4")
      .rdd
      .groupBy(row => (row(0), row(1), row(2)))  // similar to groupBy("_1", "_2","_3") on dataframe
      .flatMap(kv => kv._2)   // taking the grouped data
      .map(_.mkString(","))   // making data in csv format

    fp.coalesce(1).saveAsTextFile("file://" + test.toString())

答案 3 :(得分: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);