将数组元素从一个数组位置移动到另一个位置
我很难弄清楚如何移动数组的元素。例如,给定以下内容:
var array = [ 'a', 'b', 'c', 'd', 'e'];
如何编写函数将元素移动'd'
到左侧'b'
?
还是'a'
在右边'c'
?
移动元素后,应更新其余元素的索引。结果数组将是:
array = ['a', 'd', 'b', 'c', 'e']
这似乎应该很简单,但我无法理解它。
-
如果您想要 npm 上的版本,array-move是最接近这个答案的,尽管它不是相同的实现。有关更多详细信息,请参阅其用法部分。可以在 npm
的array.prototype.move上找到此答案的先前版本(修改后的
Array.prototype.move) 。
我在这个功能上取得了相当大的成功:
function array_move(arr, old_index, new_index) { if (new_index >= arr.length) { var k = new_index - arr.length + 1; while (k--) { arr.push(undefined); } } arr.splice(new_index, 0, arr.splice(old_index, 1)[0]); return arr; // for testing }; // returns [2, 1, 3] console.log(array_move([1, 2, 3], 0, 1));
请注意,最后一个
return
仅用于测试目的:splice
就地对数组执行操作,因此不需要返回。通过扩展,这move
是一个就地操作。如果您想避免这种情况并返回副本,请使用slice
.单步执行代码:
- 如果
new_index
大于数组的长度,我们希望(我假设)用 newundefined
s 正确填充数组。这个小片段通过推动undefined
数组来处理这个问题,直到我们有适当的长度。 - 然后,在 中
arr.splice(old_index, 1)[0]
,我们拼接出旧元素。splice
返回拼接出来的元素,但它在一个数组中。在我们上面的例子中,这是[1]
. 所以我们采用该数组的第一个索引来获取原始1
数据。 - 然后我们使用
splice
将这个元素插入到 new_index 的位置。由于我们在 if 上面填充了数组new_index > arr.length
,它可能会出现在正确的位置,除非他们做了一些奇怪的事情,比如传入一个负数。
一个更好的版本来解释负指数:
function array_move(arr, old_index, new_index) { while (old_index < 0) { old_index += arr.length; } while (new_index < 0) { new_index += arr.length; } if (new_index >= arr.length) { var k = new_index - arr.length + 1; while (k--) { arr.push(undefined); } } arr.splice(new_index, 0, arr.splice(old_index, 1)[0]); return arr; // for testing purposes }; // returns [1, 3, 2] console.log(array_move([1, 2, 3], -1, -2));
array_move([1, 2, 3], -1, -2)
这应该适当地考虑(将最后一个元素移到倒数第二个位置)之类的事情。结果应该是[1, 3, 2]
。无论哪种方式,在您最初的问题中,您都会
array_move(arr, 0, 2)
为a
after做c
。对于d
以前b
,你会这样做array_move(arr, 3, 1)
。 - 如果
-
将数组元素从一个数组位置移动到另一个数组位置
2021-02-02 关注 0 浏览147 1答案
-
从一个数组中删除另一个数组中的元素
2021-01-29 关注 0 浏览159 1答案
-
将文件夹结构(无文件)从一个位置复制到另一个位置
2021-02-01 关注 0 浏览78 1答案
-
反应动画将元素从一个父对象移动到另一个父元素
2021-01-31 关注 0 浏览110 1答案
-
在一个Word文档中,将一段文本移动到另一个位置的常用操作是:
2022-05-07 关注 0 浏览17 1答案
-
移动用户从一个NSC移动到另一个NSC时,就会进行位置更新。
2022-05-09 关注 0 浏览14 1答案
-
从一个数组复制到另一个数组的最佳方法
2021-01-29 关注 0 浏览126 1答案
-
根据另一个数组的元素对一个数组进行排序
2021-01-31 关注 0 浏览129 1答案
-
根据另一个参考数组从一个数组中选择接近匹配
2021-01-29 关注 0 浏览108 1答案
-
如何将一个元素移动到另一个元素?
2021-02-02 关注 0 浏览108 1答案