将数组元素从一个数组位置移动到另一个数组位置
我很难弄清楚如何移动数组元素。例如,给出以下内容:
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’
这似乎应该很简单,但是我无法将其包裹住。
-
如果您想在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)
。 - 如果
-
将数组元素从一个数组位置移动到另一个位置
2022-03-22 关注 0 浏览73 1答案
-
从一个数组中删除另一个数组中的元素
2021-01-29 关注 0 浏览159 1答案
-
从一个数组复制到另一个数组的最佳方法
2021-01-29 关注 0 浏览126 1答案
-
根据另一个数组的元素对一个数组进行排序
2021-01-31 关注 0 浏览129 1答案
-
如何从另一个数组的所有元素中过滤一个数组
2021-02-02 关注 0 浏览162 1答案
-
NumPy使用索引数组将一个数组存储在另一个数组中
2021-01-29 关注 0 浏览96 1答案
-
检查一个数组中的每个元素是否在另一个数组中
2021-01-31 关注 0 浏览165 1答案
-
将一个数组的每一行与另一个数组的每个元素乘以numpy
2021-01-29 关注 0 浏览104 1答案
-
检查一个数组中的每个元素是否在另一个数组中
2021-02-02 关注 0 浏览82 1答案
-
根据另一个参考数组从一个数组中选择接近匹配
2021-01-29 关注 0 浏览108 1答案