使用Keys交换数组元素

时间:2014-02-05 22:57:43

标签: javascript arrays

我试图在一个看起来像这个

的数组中交换两个数组元素
[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 个答案:

答案 0 :(得分:1)

查看array_flip功能。

它允许您使用元素交换键:

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

变为

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