在 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 的行基本上是:
- 如果
flat
数组中至少有一项是另一个数组,它将处理steamrollArray
(所以这是一个递归函数)
- 如果
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]
关键是表达式前面的 return
:flat
没有被修改,因为它是平的,并准备好作为函数的最终值返回。
我认为这个函数可以这样改写得更清楚:
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]]]]));
我正在通过查看 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 的行基本上是:
- 如果
flat
数组中至少有一项是另一个数组,它将处理steamrollArray
(所以这是一个递归函数) - 如果
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]
关键是表达式前面的 return
:flat
没有被修改,因为它是平的,并准备好作为函数的最终值返回。
我认为这个函数可以这样改写得更清楚:
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]]]]));