栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

如果您想在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

逐步执行代码:

  1. 如果
    new_index
    大于数组的长度,我们(我想)用new
    undefined
    s 正确填充数组。这个小片段通过推动
    undefined
    数组直到我们拥有适当的长度来处理此问题。
  2. 然后,在中
    arr.splice(old_index, 1)[0]
    ,我们拼接出旧元素。
    splice
    返回被拼接的元素,但是它在数组中。在上面的示例中,这是
    [1]
    。因此,我们采用该数组的第一个索引来获取原始数据
    1
  3. 然后,我们使用
    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)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517854.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号