2016-11-26 72 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, 
    }; 
});