将多个元素放入JavaScript数组

将多个元素放入JavaScript数组,javascript,Javascript,在JavaScript中,我用传统方式填充array元素,例如: myArray[12] = 123; myArray[13] = 432; myArray[14] = 233; myArray[15] = 98; 通过一个命令可以更快地完成这项工作吗 例如,将数字[123、432、233、98]放入myArray[12-15]。。。以某种方式不是一个接一个 如何优化这种场景: newArray[12] = oldArray[30]; newArray[13] = oldArray[31];

JavaScript中,我用传统方式填充array元素,例如:

myArray[12] = 123;
myArray[13] = 432;
myArray[14] = 233;
myArray[15] = 98;
通过一个命令可以更快地完成这项工作吗

例如,将数字
[123、432、233、98]
放入
myArray[12-15]
。。。以某种方式不是一个接一个


如何优化这种场景:

newArray[12] = oldArray[30];
newArray[13] = oldArray[31];
newArray[14] = oldArray[32];
newArray[15] = oldArray[33];
当一个数组中相邻的n个元素(上例中为4个)需要移动到另一个数组时


请告知。

您可以使用
推送功能:

myarray.push([123, 432, 233, 98]);
要将整个阵列添加到阵列或添加单个项目,请执行以下操作:

myarray.push(123, 432, 233, 98);
要添加到特定位置,需要使用
splice()
函数

文档:


最接近的方法是使用
拼接
设置输入位置

第一个参数是要开始的索引,第二个参数是要删除多少项,下一个参数是值

这是一些我在控制台中弄得乱七八糟的输出

myArray = new Array(15)
myArray.splice(12, 4, 123, 432, 223, 98)
myArray.forEach(function(v, i){console.log(v, i)})
123 12
432 13
223 14
98 15
undefined
myArray[12]
123
myArray[13]
432
myArray[14]
223
myArray[15]
98
当然,这有几个不足之处:无法传递要插入的值数组,数组需要足够大(即,除非数组至少12长,否则无法在索引12处插入)

要将一个数组中一组索引的值传输到另一个数组中的另一组索引,我认为必须循环<代码>拼接
单独获取要添加的值,而不是作为数组。当然,您可以使用循环编写一个方法,然后重用它。

您应该使用.concat(),如下所示:

myArray = myArray.concat([123, 432, 233, 98])
或者使用.push(),如下所示:

myArray.push(123,432,233,98)
splice
的第一个参数是要开始的索引,第二个是要删除的元素数,其余的是要插入的元素。因此,如果您插入的号码与删除的号码相同,则最终会替换它们

如果您确实希望它来自另一个阵列,您可以尝试以下方法,尽管它没有那么干净:

var oldArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
               12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
               22, 23, 24, 25, 26, 27, 28, 29, 123, 
               432, 233, 98, 34, 35]
var newArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
               12, 13, 14, 15, 16, 17, 18, 19, 20];

[].splice.apply(newArray, [12, 4].concat(oldArray.slice(30, 30 + 4)));

// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
// 123, 432, 233, 98, 16, 17, 18, 19, 20]
这可能比以前效率低,但它非常简单,可能适用于许多用例。

Array.prototype.push()
Array.prototype.splice()
都是不错的主意,但是
push()
总是附加到数组的末尾(即,从
length
属性指定的索引开始)和
splice()
要求您在插入之前删除与插入相同数量的元素(这是需要的两倍)

因此,应使用循环:

 for (var i = 12; i < 16; ++i)
 {
   _new[i] = old[i + 18];
 }
更复杂的概括是可以想象的,例如传递一个或两个索引数组,这样索引就不必是连续的

(请抵制将此作为
Array.prototype
方法的诱惑,除非您希望在使用
-
中的
以无序方式在稀疏数组上进行有效迭代时必须使用
Object.prototype.hasOwnProperty()
。)


下次,请先尝试一下。

最新方法:使用Spread with Splice

下面是最新最简单的方法

(扩展)运算符与前面示例中使用的
拼接方法一起使用

这将删除从索引12开始的4个元素,然后将所需数组插入位置12到15

尝试示例代码

constmyarray=[0,1,2,3,4,5,6,7,8,9,10,11,
12, 13, 14, 15, 16, 17, 18, 19, 20];
log('Before:',JSON.stringify(myArray));
myArray.splice(12,4,…[1234322398]);

console.log('After:',JSON.stringify(myArray));
值从何而来?@Blaster将数组推到数组上不会达到您期望的效果@Ωmega:我还添加了
splice
函数,允许您将项目放置在指定位置。好主意,但是
Array.prototype.splice()
将插入元素,而不是替换现有的元素。要解决这一问题,您必须删除尽可能多的插入元素。我认为最好的解决方案是使用循环,但如果ECMAScript实现能够像Python那样支持切片替换,那就太好了。可能是协调一致的(ES 6)。刚刚做了,你是索尔,你必须循环。索尔=Sht不走运。正如我看到的“你不能不循环,你是索尔,对不起”。但是,你可以不循环:
var items=[123,432,223,98];myArray.splice.apply(myArray,[12,items.length].concat(items))问题是,你愿意吗?它比普通的,也许是广义的循环要贵两倍多。我这里甚至不说内存。另请看我的答案。
splice
不需要你移除任何特定数量的元素。如果你想以这种方式替换某一组元素,你应该删除这个数字。但这似乎没有太大的限制。@ScottSauyet再次阅读了这个问题。谢谢你的否决票。仅仅因为你不理解或不喜欢一个答案并不意味着它是错误的或没有用处。我重新阅读了这个问题,看到了“通过一个命令可以更快地完成吗?”.当我看到你的代码时,我投了反对票。虽然这很仓促,但我删除了它。此外,我不认为在我回答问题时添加了旧数据源。(我可能错了。)但基本问题很简单,回答也很简单。
 for (var i = 12; i < 16; ++i)
 {
   _new[i] = old[i + 18];
 }
function putValues(array1, array2, start1, start2, num)
{
  if (typeof start1 == "undefined") start1 = 0;
  if (typeof start2 == "undefined") start2 = 0;
  var max = (typeof num == "undefined") ? array2.length : start2 + num;

  for (var i = start1, j = start2; j < max; ++i, ++j)
  {
    array1[i] = array2[j];
  }
}

putValues(newArray, oldArray, 12, 30, 4);