将数组元素从一个数组位置移动到另一个数组位置我很难搞清楚如何移动数组元素。例如,给出以下内容:var arr = [ 'a', 'b', 'c', 'd', 'e'];我怎么能写一个'd'以前移动的函数'b'?还是'a'之后'c'?移动后,应更新其余元素的索引。这意味着在第一个例子中,移动arr [0]将='a',arr [1] ='d'arr [2] ='b',arr [3] ='c',arr [4] = 'E'这看起来应该很简单,但我无法绕过它。
3 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
这是我在JSPerf上发现的一个内容....
Array.prototype.move = function(from, to) { this.splice(to, 0, this.splice(from, 1)[0]);};
这是很棒的阅读,但如果你想要性能(在小数据集中)尝试...
Array.prototype.move2 = function(pos1, pos2) { // local variables var i, tmp; // cast input parameters to integers pos1 = parseInt(pos1, 10); pos2 = parseInt(pos2, 10); // if positions are different and inside array if (pos1 !== pos2 && 0 <= pos1 && pos1 <= this.length && 0 <= pos2 && pos2 <= this.length) { // save element from position 1 tmp = this[pos1]; // move element down and shift other elements up if (pos1 < pos2) { for (i = pos1; i < pos2; i++) { this[i] = this[i + 1]; } } // move element up and shift other elements down else { for (i = pos1; i > pos2; i--) { this[i] = this[i - 1]; } } // put element from position 1 to destination this[pos2] = tmp; } }
我不能相信,它应该全部归Richard Scarrott所有。它在此性能测试中击败了基于拼接的方法,用于较小的数据集。然而Darwayne指出,在较大的数据集上,它会明显变慢。
添加回答
举报
0/150
提交
取消