這個挑戰就是擊敗陣列時不定義任何新的功能:展平數組:0從哪裏來?
// challenge
const arr = [1, [2]]
const flattened = arr.reduce(/*your code here, no function expressions or declarations allowed*/, [])
console.log(flattened) // expected: [1, 2]
我的解決方法是不行的,但真正的錯誤我是,我不知道那裏的0
是來自:
// Solution 1
const arr = [1, [2]]
const flattened = arr.reduce(Function.prototype.call.bind(Array.prototype.concat), [])
console.log(flattened) // unexpected result: [1, 0, 1, [1], 2, 1, 1, [1]]
我預料的代碼行爲像後續的,預期其工作原理:
// Solution 2
const arr = [1, [2]]
const flattenReducer = (x, y) => Function.prototype.call.bind(Array.prototype.concat)(x, y)
const flattened = arr.reduce(flattenReducer, [])
console.log(flattened) // logs the expected result: [1, 2]
我的節點,Chrome和杉木測試efox並獲得了相同的結果。
那麼0來自何處?爲什麼解決方案1和解決方案2產生flattened
的不同值?
現在我看到'0'來自哪裏,它來自索引 –