我如何获得每次返回相同的结果?
问题描述:
难道你们中的任何人都可以告诉我怎么写这个功能,以便我每次都可以得到相同的结果,而不是每次打电话addSomething(myArray)
时都加上('nah man')
?我如何获得每次返回相同的结果?
这是一个所谓的unpure功能吗?
这是一个副作用吗?
function addSomething(array) {
array.push('nah man')
}
let myArray = [1, 2]
addSomething(myArray)
//=> [1, 2, 'nah man']
addSomething(myArray)
//=> [1, 2, 'nah man', 'nah man']
答
这是因为阵列是通过引用传递和不珍惜如此在函数数组的任何更改到主阵列制成。 使用切片以您想要的方式完成此项工作。
function addSomething(array) {
array=array.slice();
array.push('nah man');
return array;
};
let myArray = [1, 2];
addSomething(myArray);
//=> [1, 2, 'nah man']
addSomething(myArray);
//=> [1, 2, 'nah man']
+0
这就是它。非常感谢。但是,你知道我所做的是一种所谓的非纯函数吗? – CodeSamurai
+0
这只是因为参数是一个数组 – user7951676
答
看看我的简单的例子
function addSomething(array) {
let b = array.slice();
b.push('nah man');
return b;
}
let myArray = [1, 2];
let newArray1 = addSomething(myArray);
let newArray2 = addSomething(newArray1);
console.log(myArray);
console.log(newArray1);
console.log(newArray2);
你的意思是你要在不改变原有返回一个新的数组? – Ryan
'array.concat('nah man')' – AbM
感谢您的建议,但我严格地讲在函数中。我假设你不是在用函数内的array.concat('nah man')替换array.push('nah man')。 – CodeSamurai