2016-11-26 69 views
-1

所以我有对象的大规模阵列看起来像这样:置换位置与JavaScript对象

var obj = [ 
    {longitude: lng1, latitude: lat1}, 
    {longitude: lng2, latitude: lat2} 
] 

我需要一个JavaScript函数,让我来排列每个对象的位置阵列内的属性如下:

var switchedObj = [ 
    {latitude: lat1, longitude: lng1}, 
    {latitude: lat2, longitude: lng2} 
] 

有人能指出我在正确的方向吗?
谢谢。

+4

'置换的positions' - 要交换的经度和纬度的属性的顺序?我可以问,这会造成什么不同?这两个对象将具有相同的属性。结果是,javascript对象属性没有“order”的概念,因为没有理由这么做 –

+0

说了这么多之后,属性顺序(当由JSON.stringify输出时)看起来可以被控制 - var switchedObj = obj。 map(函数(item){return {latitude:item.latitude,longitude:item.longitude}}); console.log(JSON.stringify(switchedObj));' - 你会看到输出具有你想要的顺序的属性 - 现在在Firefox,Chrum,IE和Edge中测试过 - 所有的行为都一样 –

+0

嗨@JaromandaX感谢你的答案。我会在稍后尝试。我需要它的原因是因为某些框架希望你以某种顺序定义对象,否则它不起作用。我知道,一般来说,JavaScript没有订单的概念,但是当涉及第三方框架时,它是一个不同的球类游戏。我希望你明白我的观点。 – AllJs

回答

1

这是一个工作解决方案。假设我们有lng1,lat1,lng2和lat2的值。

基本上可以说我们有这个对象:

var obj = [ 
{longitude:10,latitude:100}, 
{longitude:20, latitude:200} 
] 

然后得到做到这一点,你需要简单的解决方案。希望能帮助到你!

var obj = [ 
 
{longitude:10, 
 
latitude:100 
 
}, 
 

 
{longitude:20, 
 
latitude:200 
 
} 
 
] 
 

 
var arr1 = []; 
 
var arr2 = []; 
 
var switchedObj = []; 
 
for(var i in obj){ 
 
\t if(obj[i].hasOwnProperty("longitude") && obj[i].hasOwnProperty("latitude")){ 
 
\t \t arr1.push(obj[i]["longitude"]); // 10 and 20 
 
\t \t arr2.push(obj[i]["latitude"]); 
 
\t } 
 
} 
 
for(var k = 0; k < obj.length; k++){ 
 
     switchedObj.push({ 
 
     latitude: arr2[k], 
 
     longitude: arr1[k] 
 
    }); 
 
} 
 

 
console.log(switchedObj);

+0

感谢您的回答@HenryDev。它为我工作。 – AllJs

+0

@AllJs不客气!很高兴帮助。 – HenryDev

0

灵感来自d3.js permute功能:

var obj = [ 
    {longitude: 1, latitude: 2}, 
    {longitude: 3, latitude: 4} 
] 

var permute = function(object) { 
    var i = Object.keys(object[0]).length; // ["latitude", "longitude"], length = 2 
    var switchedObj = new Array(i); 

    while (i--) switchedObj[i] = object[i]; // go through obj in reverse order 
              // and assign values to new obj 
    return switchedObj; 
}; 

permute(obj); 
// => [ 
// {latitude: 2, longitude: 1}, 
// {latitude: 4, longitude: 3} 
// ] 
0

你需要一个for循环,返回与任何命令你想要的键的对象。这是地图的首要条件,如下所示。不幸的是,JS规范中没有要求对象的属性保持相同的顺序。实际上,他们通常会这样做。但我不会依赖这个。

var switchedObj = obj.map(coords => 
    ({latitude: coords.latitude, longitude: coords.longitude}) 
); 

编辑:对于使用旧版本的JavaScript的人:

var switchedObj = obj.map(function(coords) { 
    return { 
    latitude: coords.latitude, 
    longitude: coords.longitude, 
    }; 
});