我们的数组有两个类型为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(未找到)作为结果。问题是什么?
答案 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