当前位置: 首页 > 面试题库 >

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

邬浩涆
2023-03-14
问题内容

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

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

逐步执行代码:

  1. 如果new_index大于数组的长度,我们(我想)用new undefineds 正确填充数组。这个小片段通过推动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)将为aafter做c。对于d以前b,你会做array_move(arr, 3, 1)



 类似资料:
  • 我有办法转移arr元素: 当我执行这段代码时,我遇到了一个异常: 据我所知,程序需要更多的空间来包含另一个项目。但是我不需要添加更多的项目,我需要已经存在的移动。用参数,如果参数为负,所有数组向左移动,如果为正向右移动,如果为零-什么都不会发生。

  • 问题内容: 说我有这些二维数组A和B。 如何从B中删除A中的元素。(集合论中的补语:AB) 更准确地说,我想做这样的事情。 问题答案: 基于this solution对,这里是用更少的内存占用与NumPy基础的解决方案,并与大型阵列工作时,可能是有益的- 样品运行- 在大型阵列上的运行时测试- 具有基础解决方案的时间- 基于更少内存占用量的定时解决方案- 进一步提升性能 通过将每一行视为索引元组来

  • 有一种方法可以将特定的数字从一个数组复制到另一个数组吗? 例如: 我有一个数组 ,我想将奇数和偶数复制到不同的数组中。因此,结果应该是

  • 我正试图将数据复制到数组中,但出现了一个错误,称无法转换类型。我该怎么解决这个问题?

  • 问题内容: 我想了解 从另一个数组的所有元素过滤数组 的最佳方法。我尝试使用过滤器功能,但是如何给它提供要删除的值并没有解决。 就像是: 如果过滤器功能没有用,您将如何实现呢? 编辑:我检查了可能重复的问题,它可能对那些容易理解javascript的人有用。选中的答案很容易。 问题答案: 您可以使用函数的参数来避免将过滤器数组存储在全局变量中。