【发布时间】:2023-03-16 04:01:02
【问题描述】:
这背后的原理是什么?
newArr.some(Array.isArray) === newArr.some(elem => Array.isArray(elem))
如何将它们解析为相等?
我认为newArr.some(Array.isArray) === newArr.some(Array.isArray())(假设some 是一个循环并且JS 假设每个val 都是func 的隐含arg),但事实并非如此。所以,我很困惑。请帮帮我。
这里,上面的案例有2个应用:
function flatMultiArr(arr) {
let newArr = [].concat(...arr);
return newArr.some(Array.isArray)
? flatMultiArr(newArr)
: newArr
}
console.log();//[ 1, {}, 3, 4 ]
function flatMultiArr(arr) {
let newArr = [].concat(...arr);
return newArr.some(elem => Array.isArray(elem))
? flatMultiArr(newArr)
: newArr
}
console.log();//[ 1, {}, 3, 4 ]
注意这个问题不是关于如何展平多维数组。
【问题讨论】:
-
.some采用回调函数。你可以直接传入一个函数,或者将它包装在一个匿名函数中。这或多或少是一样的。arr.some(e => (e => Array.isArray(e))(e))也有效——你可以无缘无故地继续添加间接层。 -
"我认为
newArr.some(Array.isArray) === newArr.some(Array.isArray())" 不,绝对不是。newArr.some(Array.isArray())根本没有传递回调,而是调用应该用作回调的函数的结果,这可能不起作用。回调是一个函数,所以需要传递函数,即Array.isArray,而不是调用函数的结果,Array.isArray()
标签: javascript function functional-programming