2014-02-05 63 views
0

進出口試圖在數組中,看起來像這樣與密鑰交換數組元素

[18785:Object, 22260:Object, 22261:Object, 22262:Object, 22263:Object] 

我用下面的代碼來交換兩個數組元素:

that.moveMediumDown = function(mediumID){ 

     var arrKeys = new Array(); 

     for (key in that.data.medium) { 
      arrKeys.push(parseInt(key)); 
     } 

     for (var i = 0; i < arrKeys.length; i++){ 
      if (arrKeys[i] === parseInt(mediumID)) { 

       //swap Medium 
       var tmpMedium = that.data.medium[arrKeys[i]]; 
       that.data.medium[arrKeys[i]] = that.data.medium[arrKeys[i + 1]]; 
       that.data.medium[arrKeys[i + 1]] = tmpMedium; 

       break; 
      } 
     } 

     //build new array with correct ids 

     var tmpMediumArray = new Array(); 

     for (var j = 0; j < arrKeys.length; j++){ 
      tmpMediumArray[arrKeys[j]] = that.data.medium[arrKeys[j]]; 
     } 
    } 

問題是,當我交換內容在兩個數組元素中,鍵保持不變。但我還需要交換密鑰。

所以我試圖用正確的鍵建立一個新的數組,但是後來我得到了一個包含22263個元素的數組。他們中的大多數都是未定義的,只有5個是正確的。

有沒有辦法做到這一點,而沒有得到這樣一個大陣?

在此先感謝您的幫助。

回答

1

結帳array_flip功能。

它可以讓你用的元素交換密鑰:

array_flip({a: 1, b: 1, c: 2});

成爲

{1: 'b', 2: 'c'}

+0

有趣的鏈接 – Edakos

+0

感謝您的回答。但我嘗試交換元素,而不是翻轉鍵和值。或者我錯過了什麼? – NaNO3

+0

也許我誤解了你的意思是「交換元素」?你試圖將鍵作爲'arrKeys'與數組元素交換,所以它是一樣的。 – helion3