我有一个对象数组,我想交换数组中两个元素的位置。 我试过这个:
var tempObject = array.splice(index, 1, array[index + 1]);
array.splice(index+1, 1, tempObject);
但它似乎没有正常工作,因为它会导致一些奇怪的错误。例如,我无法使用该对象的方法。调用array[x].getName
会导致错误。
任何身体都可以伸出援助之手吗?
如果重要,我已使用object.prototype
添加方法。
答案 0 :(得分:5)
代码中的错误是splice返回一个项目数组,而不是单个项目。由于您要提取单个项目,因此可以执行以下操作:
var tempObject = array.splice(index, 1, array[index + 1])[0]; // get the item from the array
array.splice(index+1, 1, tempObject);
This answer提供了更短的版本,也使用了splice:
array[index] = array.splice(index+1, 1, array[index])[0];
Another very interesting answer既短又fast:
function identity(x){return x};
array[index] = identity(array[index+1], array[index+1]=array[index]);
答案 1 :(得分:1)
var array_of_numbers = [5,4,3,2,1,0],
swap = function(array,a,b){var tmp=array[a];array[a]=array[b];array[b]=tmp;};
swap(array_of_numbers,0,4);
// array_of_numbers now is [1,4,3,2,5,0]
或者您可以将功能添加到Array.prototype
:
Array.prototype.swap = function(a,b){ var tmp=this[a];this[a]=this[b];this[b]=tmp;};
var array_of_numbers = [5,4,3,2,1,0];
array_of_numbers.swap(0,4);
// array_of_numbers now is [1,4,3,2,5,0]