Array.prototype不修改原始数组

3
我想创建一个新的数组方法,而不修改原始数组。
my_array.push('foo') //modifies my_array
my_array.slice(2) //returns a new array without modifying my_array

我希望创建一个新的 Array.prototype 方法,该方法返回调用它的数组的副本而不修改原始数组。因此,这将成为可能:

//[define new method here] Array.prototype.add_foo = function() {...
var my_array = ['poo'];

my_array.add_foo(); //would return ['poo', 'foo'];
my_array; //would return ['poo'];

先克隆数组。 - elclanrs
好的,创建一个新的数组并返回它,而不是修改 this - Paul
2个回答

9
my_array.concat('foo');

concat不会改变原始数组。


2
Array.prototype.add_foo = function(){
    var ret = this.slice(0); //make a clone
    ret.push("foo"); //add the foo
    return ret; //return the modified clone
}

5
简化版:返回 this.concat('foo')翻译:将字符串 "foo" 添加到当前字符串的末尾,然后返回新的字符串。 - elclanrs
@elclanrs:好的,我从未使用过/发现了.concat。谢谢。 - spender
由于某种原因,我有这样的印象,即我只能返回修改后的原始数组版本,而不能返回新的Array实例。谢谢。 - northamerican

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接