交换对象数组中的元素

时间:2014-01-20 08:47:11

标签: javascript arrays object swap

我有一个对象数组,我想交换数组中两个元素的位置。 我试过这个:

var tempObject = array.splice(index, 1, array[index + 1]);
array.splice(index+1, 1, tempObject);

但它似乎没有正常工作,因为它会导致一些奇怪的错误。例如,我无法使用该对象的方法。调用array[x].getName会导致错误。

任何身体都可以伸出援助之手吗?

如果重要,我已使用object.prototype添加方法。

2 个答案:

答案 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)

JSFIDDLE

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

JSFIDDLE

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]