在ES5 Javascript中,如何在不使用concat的情况下将项添加到数组并立即返回新数组?

Jas*_*lte -1 javascript arrays ecmascript-5 lodash

我经常发现自己处于我想要的情况,在单个(原子)操作中,将一个项添加到数组并返回该新数组.

['a', 'b'].push('c');
Run Code Online (Sandbox Code Playgroud)

将无法正常工作,因为它返回新的长度.

我知道以下代码有效

['a', 'b'].concat(['c']);
Run Code Online (Sandbox Code Playgroud)

但我发现它是丑陋的代码(组合两个数组只是为了在第一个数组的末尾添加一个项目).

我无法使用Array.splice()它,因为它修改原始数组(并返回已删除的项目).Array.slice()确实返回浅拷贝,但您无法添加新项目.

ES6

我知道es6你可以使用

[...['a', 'b'], 'c']
Run Code Online (Sandbox Code Playgroud)

但我正在寻找es5解决方案

Lodash

我没关系 lodash

只是为了清楚

我知道这可以通过几种不同的方式实现(比如Array.concat()上面的方法),但我正在寻找一个直观的简单代码,它不会"误用"其他运算符

小智 5

我知道下面的代码可以工作['a', 'b'].concat(['c']);但我发现它很丑陋的代码(组合两个数组只是为了在第一个数组的末尾添加一个项目).

concat()方法可以给出单个(或多个)值,而不需要首先将值封装在数组中,例如:

['a', 'b'].concat('c');   // instead of .concat(['c']);
Run Code Online (Sandbox Code Playgroud)

来自MDN(我的重点):

用于连接到新数组的数组和/或.

除此之外,没有使用扩展和现有方法的选项有限.

有关如何扩展Array的示例(这将返回当前数组):

Array.prototype.append = function(item) {
  this.push(item);
  return this
};

var a = [1, 2, 3];
console.log(a.append(4))
Run Code Online (Sandbox Code Playgroud)

可选择创建一个简单的函数,如@torazaburo所建议的,它可以将数组和项作为参数:

function append(arr, item) {
  arr.push(item);
  return arr;
}
Run Code Online (Sandbox Code Playgroud)

或使用concat():

function append(arr, item) {
  return arr.concat(item)
}
Run Code Online (Sandbox Code Playgroud)