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

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

我很难弄清楚如何移动数组元素。例如,考虑到以下情况:

var arr = [ 'a', 'b', 'c', 'd', 'e'];

我如何写一个函数来移动'd'以前'b'?

'a''c'?

移动后,应更新其余元素的索引。这意味着在移动arr后的第一个例子中,arr[0]将=‘a’,arr[1]=‘d’arr[2]=‘b’,arr[3]=‘c’,arr[4]=‘e’。

这看起来应该很简单,但是我不能把我的头绕在这上面。


慕妹3146593
浏览 4157回答 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;}我不能接受任何荣誉,这一切都应该归功于理查德·斯卡拉特..它优于本文中针对较小数据集的基于拼接的方法。性能试验..然而,在较大的数据集上,它要慢得多。正如达维恩指出的.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript