是否有更简单的方法来交换数组中的两个元素?
var a = list[x], b = list[y];
list[y] = a;
list[x] = b;
是否有更简单的方法来交换数组中的两个元素?
var a = list[x], b = list[y];
list[y] = a;
list[x] = b;
当前回答
如果只需要交换第一个和最后一个元素:
array.unshift( array.pop() );
其他回答
function moveElement(array, sourceIndex, destinationIndex) {
return array.map(a => a.id === sourceIndex ? array.find(a => a.id === destinationIndex): a.id === destinationIndex ? array.find(a => a.id === sourceIndex) : a )
}
let arr = [
{id: "1",title: "abc1"},
{id: "2",title: "abc2"},
{id: "3",title: "abc3"},
{id: "4",title: "abc4"}];
moveElement(arr, "2","4");
下面是一个不会改变列表的一行代码:
let newList =对象。赋值([],列表,{[x]:列表[y], [y]:列表[x]})
(使用了2009年问题发布时还没有的语言功能!)
如果只需要交换第一个和最后一个元素:
array.unshift( array.pop() );
为了简洁起见,这里有一个丑陋的一行代码版本,它只比上面所有的连接和切片稍微好看一点。公认的答案才是正确的选择,而且可读性更强。
考虑到:
var foo = [ 0, 1, 2, 3, 4, 5, 6 ];
如果你想交换两个下标(a和b)的值;这样就可以了:
foo.splice( a, 1, foo.splice(b,1,foo[a])[0] );
例如,如果你想交换3和5,你可以这样做:
foo.splice( 3, 1, foo.splice(5,1,foo[3])[0] );
or
foo.splice( 5, 1, foo.splice(3,1,foo[5])[0] );
两者都产生了相同的结果:
console.log( foo );
// => [ 0, 1, 2, 5, 4, 3, 6 ]
#splicehatersarepunks:)
你可以交换任意数量的对象或文字,甚至是不同类型的对象或文字,使用一个简单的恒等函数,如下所示:
var swap = function (x){return x};
b = swap(a, a=b);
c = swap(a, a=b, b=c);
针对你的问题:
var swap = function (x){return x};
list[y] = swap(list[x], list[x]=list[y]);
这在JavaScript中是可行的,因为它接受额外的参数,即使它们没有声明或使用。赋值a=b等,发生在a被传递到函数之后。