将数组元素从一个数组位置移动到另一个数组位置

将数组元素从一个数组位置移动到另一个数组位置

我很难搞清楚如何移动数组元素。例如,给出以下内容:

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'

这看起来应该很简单,但我无法绕过它。


凤凰求蛊
浏览 1145回答 3
3回答

至尊宝的传说

这是我在JSPerf上发现的一个内容....Array.prototype.move&nbsp;=&nbsp;function(from,&nbsp;to)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;this.splice(to,&nbsp;0,&nbsp;this.splice(from,&nbsp;1)[0]);};这是很棒的阅读,但如果你想要性能(在小数据集中)尝试...&nbsp;Array.prototype.move2&nbsp;=&nbsp;function(pos1,&nbsp;pos2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;local&nbsp;variables &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;i,&nbsp;tmp; &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;cast&nbsp;input&nbsp;parameters&nbsp;to&nbsp;integers &nbsp;&nbsp;&nbsp;&nbsp;pos1&nbsp;=&nbsp;parseInt(pos1,&nbsp;10); &nbsp;&nbsp;&nbsp;&nbsp;pos2&nbsp;=&nbsp;parseInt(pos2,&nbsp;10); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;positions&nbsp;are&nbsp;different&nbsp;and&nbsp;inside&nbsp;array &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(pos1&nbsp;!==&nbsp;pos2&nbsp;&&&nbsp;0&nbsp;<=&nbsp;pos1&nbsp;&&&nbsp;pos1&nbsp;<=&nbsp;this.length&nbsp;&&&nbsp;0&nbsp;<=&nbsp;pos2&nbsp;&&&nbsp;pos2&nbsp;<=&nbsp;this.length)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;save&nbsp;element&nbsp;from&nbsp;position&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;=&nbsp;this[pos1]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;move&nbsp;element&nbsp;down&nbsp;and&nbsp;shift&nbsp;other&nbsp;elements&nbsp;up &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(pos1&nbsp;<&nbsp;pos2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;pos1;&nbsp;i&nbsp;<&nbsp;pos2;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this[i]&nbsp;=&nbsp;this[i&nbsp;+&nbsp;1]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;move&nbsp;element&nbsp;up&nbsp;and&nbsp;shift&nbsp;other&nbsp;elements&nbsp;down &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;pos1;&nbsp;i&nbsp;>&nbsp;pos2;&nbsp;i--)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this[i]&nbsp;=&nbsp;this[i&nbsp;-&nbsp;1]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;put&nbsp;element&nbsp;from&nbsp;position&nbsp;1&nbsp;to&nbsp;destination &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this[pos2]&nbsp;=&nbsp;tmp; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;}我不能相信,它应该全部归Richard Scarrott所有。它在此性能测试中击败了基于拼接的方法,用于较小的数据集。然而Darwayne指出,在较大的数据集上,它会明显变慢。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript