在 else 运算符之后提及原始数组是什么意思?

what does it mean to mention the original array after an else operator?

我正在通过查看 freecodecamp 中问题的不同答案来学习,我遇到了这个我无法弄清楚最后一部分的答案:

function steamrollArray(arr) {
    const flat = [].concat(...arr);
    return flat.some(Array.isArray) ? steamrollArray(flat) : flat;
  }
  
  console.log(steamrollArray([[3, [[4]]]]));

为什么在“else :”后面说“flat”,这是什么意思? 它只是提到了原始数组,没有像 .push() 或其他方法那样发生任何事情。

它指的是这一行中的原始平面变量:

const flat = [].concat(...arr);

如果此行为假,将返回:

flat.some(Array.isArray)

带有 return 的行基本上是:

  1. 如果flat数组中至少有一项是另一个数组,它将处理steamrollArray(所以这是一个递归函数)
  2. 如果 some 方法 return 为假,它将 return 平面变量保持原样。平面变量最终将是一个数字,这意味着 .some 将 return 为假并退出一级递归等。

运行代码更容易理解,还有.some() JS function.

上的文档

function steamrollArray(arr) {
    const flat = [].concat(...arr);
    return flat.some(Array.isArray) ? steamrollArray(flat) : flat;
  }
  
 console.log(steamrollArray([[3, [[4]]]]));
 //output = [3,4]

关键是表达式前面的 returnflat 没有被修改,因为它是平的,并准备好作为函数的最终值返回。

我认为这个函数可以这样改写得更清楚:

function steamrollArray(arr) {
    const flat = [].concat(...arr);
    if (flat.some(Array.isArray)) { // check if the array is not flat
        return steamrollArray(flat); // if it is not flat, process it more
    }
    return flat; // return a completely flat array
}
  
console.log(steamrollArray([[3, [[4]]]]));