javascript - 如何用另一个数组扩展现有的 js 数组?

标签 javascript arrays extend

我找到了this问题但不幸的是它刚刚关闭。有很多好的答案,但我想知道为什么没有人提出以下解决方案:

a = a.concat(b)

作者说他不想有一个新数组,而是扩展数组a。

最佳答案

将局部变量设置为值并不一定意味着它将传播到引用该变量的任何地方。举个例子:

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 修改。由于 abar 是引用,因此当您将 a 设置为 bar.concat 的返回值时,会生成一个副本bar 被创建并分配给 abar 引用的位置不会更改,之前称为 bar 的数组的内容也不会更改。

当一个引用被重新分配时,它不会传播到引用 bar 的每个地方(如果是这样,复制几乎是不可能的)。

<小时/>

要了解哪种数组方法在这种情况下最有帮助,您可能会pushsplice。这取决于确切的用途(在特定索引处追加或插入、删除现有元素、一次一个或从另一个数组中删除)。

Splice可以在数组中做一些有趣的事情,并且具有返回被删除元素的有趣属性。它可以插入和替换元素,具体取决于提供的参数。

Push就是这样做的,将元素附加到数组的末尾,就像它是一个列表一样。如果您有另一个数组,it.push.apply(other) 是组合它们的便捷方法。

如果您有权访问 Underscore.js ,里面的很多收集方法都是有用的。它们通常返回一个新数组,但提供诸如展平联合等功能。

关于javascript - 如何用另一个数组扩展现有的 js 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26019245/

相关文章:

javascript - 如何将状态(用户选择的值)从一个组件导出到 React 中的另一个组件?

javascript - 来自外部 JS 文件的 reCaptcha 加载功能?

javascript - 按键排序映射返回排序后的 Map 对象,其第一个键位于最后一个索引中

css - 在 SASS 中恢复@extend

javascript - 使用 javascript 调整屏幕分辨率

javascript - 按住鼠标按钮且光标不在视口(viewport)外时如何检测鼠标离开?

c++ - 如何填充和编辑 map 的std::array

javascript - 我想根据属性键值对从对象返回的项目进行排序,然后为界面中的每个项目分配排名(1,2,3...等)

javascript - 扩展 JavaScript?

android - 扩展 RecyclerView : Error Inflating Class com. example.MyRecyclerView