我有以下数组:
[
[val1, val2]
[val1, val2]
[val1, val2]
[valN, valN]
]
N
表示这些数组不受限制,即我不知道它存储了多少。我试图完成的是将该数组转换为具有键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}
]
这不是我想要的,因为我真的需要这些lat
和lng
作为对象的键。我该如何解决这个问题?
答案 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);