提问人:Ameen Shamsan 提问时间:6/16/2023 最后编辑:Ameen Shamsan 更新时间:6/16/2023 访问量:40
在 javascript 中的回调函数中调用 main 函数
Calling the main function inside a callback function in javascript
问:
我正在努力理解以下代码:
let myArray = ["J", "a", "v", ["a", "scrip"], "t"];
const flatten = (myArray) => {
return myArray.reduce((flat, arry) => {
return Array.isArray(arry) ? flat.concat(flatten(arry)) : flat.concat(arry);
}, []).join("");
};
console.log(flatten(myArray));
// Output => Javascript
我对为什么在带有参数的函数中调用“Main 函数”感到困惑。既然函数经过了 ,为什么还需要呢?当我尝试删除回调函数中的调用时,如下所示:flatten
reduce
arry
reduce
myArray
flatten
reduce
const flatten = (myArray) => {
return myArray.reduce((flat, arry) => {
return Array.isArray(arry) ? flat.concat(arry) : flat.concat(arry);
}, []).join("");
};
console.log(flatten(myArray))
代码产生了相同的结果。那么,为什么需要主函数调用,它又有什么不同呢?我只需要了解事情的真正运作方式。
感谢您的帮助。
答:
1赞
Geshode
6/16/2023
#1
区别在于递归。
如果你做第一个版本,不管数组有多深,它总是返回,但如果你去掉递归,那么你最终会得到别的东西。Javascript
使用递归
let myArray = ["J", ["a", "v"], ["a", "s", ["c", ["r", "i"], "p"]], "t"];
const flatten = (myArray) => {
return myArray.reduce((flat, arry) => {
return Array.isArray(arry) ? flat.concat(flatten(arry)) : flat.concat(arry);
}, []).join("");
};
console.log(flatten(myArray))
无递归
let myArray = ["J", ["a", "v"], ["a", "s", ["c", ["r", "i"], "p"]], "t"];
const flatten = (myArray) => {
return myArray.reduce((flat, arry) => {
return Array.isArray(arry) ? flat.concat(arry) : flat.concat(arry);
}, []).join("");
};
console.log(flatten(myArray))
您可以运行代码片段来查看它们如何返回不同的结果。
1赞
Nashit Shayan
6/16/2023
#2
这就是所谓的递归。这个想法是你遍历这个数组,如果找到另一个数组,然后再次调用该数组的相同函数。否则,只需将值连接到结果即可。
使用以下数组并运行带有和不具有递归调用的代码,您将看到差异。flatten
let myArray = ["J", "a", "v", ["a", "scrip"], "t", [' ','is', [' ', 'awe', ['some']]]];
评论
["J", "a", "v", ["a", "s", ["cr", "ip"]], "t"]
return Array.isArray(arry) ? flat.concat(arry) : flat.concat(arry);
return flat.concat(arry);
arry
Array.isArray(arry)
arry
myArray.flat(Infinity).join('')