2014-02-05 62 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