我找到了一个很好的功能,可以将数组中的元素移动到不同的位置:
function eleMove1( arr, from, to ) {
arr.splice( to, 0, arr.splice( from, 1 )[ 0 ] );
}
var arr = [ 'a', 'b', 'c', 'd', 'e' ];
eleMove1( arr, 3, 0 );
console.log ( 'eleMove1: ' + arr ); // eleMove1: d,a,b,c,e
console.log ( arr ); // ["d", "a", "b", "c", "e"]
console.log ( '\n ' );
/*
*/
function eleMove2( arr, from, to ) {
arr.splice( to, 0, arr.splice( from, 1 ) );
}
var arr = [ 'a', 'b', 'c', 'd', 'e' ];
eleMove2( arr, 3, 0 );
console.log ( 'eleMove2: ' + arr ); // eleMove2: d,a,b,c,e
console.log ( arr ); // [["d"], "a", "b", "c", "e"]
console.log ( '\n ' );
但是当我刚开始使用JS时,我对拼接语句的[ 0 ] );
部分的相关性感到困惑。惯例让我相信它指的是数组的第一个索引元素。但是阵列是什么?当然不是arr传递给了函数,而且肯定不是函数的arg数组,因为我从原来的函数中解除了这个函数并没有实际上将arr作为函数之一传递给函数' s args:
Move an array element from one array position to another
似乎是在arr的第二次拼接调用结束时挂起,但我仍然无法弄清楚为什么和为什么。
然而,arr的输出似乎在很大程度上不受缺少这一小段代码的影响。这个小片段在拼接语句中的重要性是什么,如果有的话,它如何与函数的整体性能相关?答案 0 :(得分:4)
[0]
是指数组中第一个被删除的元素。如果我们浏览代码。
function eleMove1( arr, from, to ) {
arr.splice( to, 0, arr.splice( from, 1 )[ 0 ] );
}
类似于这样写作。
function eleMove1( arr, from, to ) {
deletedItemsArray = arr.splice( from, 1 );
itemYouDeleted = deletedItemsArray[0];
arr.splice( to, 0, itemYouDeleted);
}
这是有效的,因为splice在适当位置变异并返回它作为数组删除的项目。删除的项目成为初始arr.splice方法的参数,该方法将itemYouDeleted
置于to
位置
答案 1 :(得分:1)
您的输出确实显示了此代码的不同之处。
orig: console.log ( arr ); // ["d", "a", "b", "c", "e"]
changed: console.log ( arr ); // [["d"], "a", "b", "c", "e"]
^^^^^
那个小[0]
抓住splice
返回的数组中的第一个元素,并在插入时使用它而不是整个数组。