javascript - array1.concat(array2) 在函数调用后不持久的影响

标签 javascript pass-by-reference concatenation

这个有效:

var f = function(a){
   a.push(1);
};
var a = [];
f(a);
console.log(a);//[1];

但是这个:

var f = function(a){
   a = a.concat([1]);
};
var a = [];
f(a);
console.log(a);//[];

不起作用。对于工作,我的意思是所做的更改在函数调用后仍然存在。

现在我意识到这很可能与“按值引用”传递的参数有关,这意味着引用的更改(即分配新对象)在函数调用后不会持续存在。

所以我想知道,是否有 concat 的持久化版本?还是我必须手动将所有元素从一个数组插入另一个数组?

编辑:你们所有人都建议返回新创建的数组:这正是我不想要的。如果我想这样做,我就不会提出这个问题。而且我当然不会结束它专门要求 concat 的持久版本。

最佳答案

concat 返回一个新数组,它不会改变源数组。

var f = function(a){
   return a.concat([1]);
};

var a = f([]);

console.log(a);//[1];

如果您确实想要改变数组,只需使用 push.apply 将数组元素作为单独的参数传递给 push 函数。

 var f = function(a) {
     a.push.apply(a, [1]);
 };

 var a = [];

 f(a);

 console.log(a); //1

关于javascript - array1.concat(array2) 在函数调用后不持久的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25248901/

相关文章:

concatenation - 如何在 YAML 中进行字符串连接或字符串替换?

javascript - 无法在 Javascript 中连接 String+Variable+String

python - Pandas concat DataFrames - 保持索引的原始顺序

javascript - Editor_dataTables - 多个表的内联编辑

javascript - 如何在选择标签中添加虚线作为选项?

javascript - 如果行数不正确,则显示用户无法继续的信息消息

c++ - 重载赋值运算符 : if we return (*this),,它是指针/地址处的值,赋值运算符的正确语法是什么?

javascript - dijit.byId ('viewEditParameterValue' ).value 不返回而 .get ('value' ) 返回

python - 理解如何在 Python 的合并排序中存储和传递值的概念的问题

c++ - 在 C++ 中通过引用和值传递