最佳答案
将局部变量设置为值并不一定意味着它将传播到引用该变量的任何地方。举个例子:
var foo = (function() {
var bar = [1, 2, 3, 4, 5];
return {
get: function() {
return bar;
},
show: function() {
$("html").append("<div>" + bar.length + "</div>");
}
};
})();
var a = foo.get();
foo.show();
a = foo.get();
a = a.concat([6, 7]);
foo.show();
a = foo.get();
a.push([6, 7]);
foo.show();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
第二次调用 show
会打印“5”,因为 bar
未被 a = a.concat
修改。由于 a
和 bar
是引用,因此当您将 a
设置为 bar.concat
的返回值时,会生成一个副本bar
被创建并分配给 a
。 bar
引用的位置不会更改,之前称为 bar
的数组的内容也不会更改。
当一个引用被重新分配时,它不会传播到引用 bar
的每个地方(如果是这样,复制几乎是不可能的)。
要了解哪种数组方法在这种情况下最有帮助,您可能会push
或splice
。这取决于确切的用途(在特定索引处追加或插入、删除现有元素、一次一个或从另一个数组中删除)。
Splice可以在数组中做一些有趣的事情,并且具有返回被删除元素的有趣属性。它可以插入和替换元素,具体取决于提供的参数。
Push就是这样做的,将元素附加到数组的末尾,就像它是一个列表一样。如果您有另一个数组,it.push.apply(other)
是组合它们的便捷方法。
如果您有权访问 Underscore.js ,里面的很多收集方法都是有用的。它们通常返回一个新数组,但提供诸如展平
和联合
等功能。
关于javascript - 如何用另一个数组扩展现有的 js 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26019245/