使用splice交换元素位置后,Javascript数组元素indexOf为-1

时间:2014-05-31 10:48:26

标签: javascript arrays swap indexof splice

我们的数组有两个类型为object的元素,如下所示:

array = [{Member1: "Value1"},{Member2: "Value2"}];

当我得到第二个对象的索引时:

var index = array.indexOf(obj);

我得到1作为结果,这很好。但是,当我交换这样的两个元素时,将这个对象从右向左移动,另一个0索引对象从左向右移动:

var new_index = index - 1;
array.splice(index, 0, array.splice(new_index, 1)[0]);

并尝试获取相同对象的索引(我知道它存在于数组中,现在只有它的索引为0)我得到-1(未找到)作为结果。问题是什么?

1 个答案:

答案 0 :(得分:1)

如果你想交换,而不是拼接,最好使用一个临时变量。

var array = [{Member1: "Value1"},{Member2: "Value2"}],
    obj = array[1];

function swap(arr, i, j) {
    var t = arr[i];
    arr[i] = arr[j];
    arr[j] = t;
    return arr;
}

console.log('before swap', array.indexOf(obj)); // 1

swap(array, 0, 1);
console.log('after swap', array.indexOf(obj)); // 0

编辑虽然尝试了您的代码,但我得到了0的预期结果,也许您已经完成了参考obj指向的内容2