2017-10-15 112 views
0

難道你們中的任何人都可以告訴我怎麼寫這個功能,以便我每次都可以得到相同的結果,而不是每次打電話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']

+1

你的意思是你要在不改變原有返回一個新的數組? – Ryan

+0

'array.concat('nah man')' – AbM

+0

感謝您的建議,但我嚴格地講在函數中。我假設你不是在用函數內的array.concat('nah man')替換array.push('nah man')。 – CodeSamurai

回答

0

這是因爲陣列是通過引用傳遞和不珍惜如此在函數數組的任何更改到主陣列製成。 使用切片以您想要的方式完成此項工作。

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

0

看看我的簡單的例子

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);

相關問題