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

如何在不创建新数组的情况下用另一个数组扩展现有的JavaScript数组

西门安民
2023-03-14
问题内容

似乎没有办法用另一个数组扩展现有的JavaScript数组,即模拟Python的extend方法。

我要实现以下目标:

>>> a = [1, 2]
[1, 2]
>>> b = [3, 4, 5]
[3, 4, 5]
>>> SOMETHING HERE
>>> a
[1, 2, 3, 4, 5]

我知道有一个a.concat(b)方法,但是它创建了一个新数组,而不是简单地扩展第一个数组。我想要一种有效的算法,该算法在a明显大于b(即不复制a)的情况下有效。


问题答案:

.push方法可以采用多个参数。您可以使用传播运算符将第二个数组的所有元素作为参数传递给.push

>>> a.push(...b)

如果您的浏览器不支持ECMAScript 6,则可以.apply改用:

>>> a.push.apply(a, b)

或者,如果您认为更清楚:

>>> Array.prototype.push.apply(a,b)

请注意,如果数组b太长(麻烦开始于大约100,000个元素,具体取决于浏览器),所有这些解决方案都将失败,并产生堆栈溢出错误。 如果不能保证b足够短,则应使用其他答案中描述的基于标准html" target="_blank">循环的技术。



 类似资料:
  • 我有以下代码,运行时会出现错误:TypeError:无法读取未定义的属性“split” 您可以在这里运行它。 我有数组,我想将它转换为数组的数组,首先在处拆分以分离数组,然后在处拆分以创建数组中的项。因此此列表将如下所示: [[data1,data2,data3],[data4,data5,data6],[data7,data8,data9]] 执行类似的操作,但当我尝试使用访问它时,它只给我第一

  • 问题内容: 我有一个看起来像这样的数组。这是一个二维数组。 我想使用此信息来创建一个新的三维数组,如下所示。 请对此有任何帮助。我陷入困境,需要弄清楚如何使用此原始数组创建新数组。因此,基本上,我将每台计算机上的所有作业分组在一起,而这些作业的密钥取决于它们在原始阵列中的状态。因此,如果原始阵列上有一个键为2的作业,而该机上没有其他作业具有更高的键,则它将变成该作业的键0,并使用该机器名创建一个新

  • 我有一个像这样的数组。这是一个二维数组。 我想使用这些信息创建一个新的三维数组,如下所示。 请在这方面提供任何帮助将不胜感激。我遇到了一些问题,需要弄清楚如何使用这个原始数组创建新数组。所以基本上,我将来自每台机器的所有作业分组在一起,这些作业的键取决于它们在原始数组中的位置。因此,如果原始数组有一个键为2的作业,而该机器上没有其他作业有更高的键,那么它将成为该作业的键0,并创建一个具有该机器名的

  • 我很好奇如何比较这些数组,请记住这是一个示例,它不限于 4 个数组,因为这可能或多或少取决于用户选择) 最终目标是根据上述所有数组的比较/验证,获得一个具有真值或假值的新数组,仅当所有 4 个数组在该索引位置都有一个真值时,才应设置一个真值,如果它们是否为假值,例如: 希望我解释得正确。

  • 我有一个现有的数组,如下所示 然后我想创建一个新的数组,如下所示 我已经通过方法尝试过了 但是它没有给出一个正确的数组,请帮助我解决这个问题

  • Array.from() Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。 下面是一个类似数组的对象,Array.from将它转为真正的数组。 let arrayLike = { '0': 'a', '1': 'b', '2': 'c',