我试图使用Concat的减少数组的数组,我想,我可以使用Array.prototype.concat功能是这样的:使用原型功能高阶函数在JavaScript
arr = [[1],[2],[3]]
arr.reduce((a, b) => Array.prototype.concat(a, b), [])
其中一期工程罚款,并给我阵列[1, 2, 3]
。后来我想我可能会更聪明,像这样做:
arr = [[1],[2],[3]]
arr.reduce(Array.prototype.concat, [])
然而,这给了我一个错误:
TypeError: Array.prototype.concat called on null or undefined
at Array.reduce (native)
at Object.<anonymous> (/home/axel/Developer/temp/reduce2.js:2:5)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.runMain (module.js:590:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
它似乎认为Array.prototype.concat
是undefined
。为什么是这样?
您必须将参数传递到'reduce'函数,并将其转换为'concat'并返回一些内容,因为此时您的'reduce'函数不返回任何内容。 –
请注意,您的初始代码中的第二行应该实际读取'arr = arr.reduce((a,b)=> a.concat(b));'这使得进一步减少成为不可能。 –
@Kinduser该函数确实会返回一些内容。箭头函数只允许单个表达式作为它们的主体,并将该表达式的结果用作它们的返回值。 – apsillers