javascript - for of 和 for 循环不同的结果

标签 javascript for-loop spread for-of-loop

谁能解释一下,为什么第一个使用常规 for 循环的解决方案可以无限循环,而第二个使用 for of 循环的解决方案却不能。代码是相同的,所以我期望得到相同的结果。

const flatten = (arr) => {
    let newArr = []
    for (i=0; i < arr.length; i++) {
        if(Array.isArray(arr[i])) {
            newArr = [...newArr, ...flatten(arr[i])]
            console.log(newArr)
        } else {
            newArr.push(arr[i])
        }
    }
    return newArr
}
// const flatten = (arr) => {
//     let newArr = []
//     for (let el of arr) {
//       if (Array.isArray(el)) {
//           console.log(el, 'i am el')
//         newArr = [...newArr, ...flatten(el)]
//         console.log(newArr)
//       } else {
//         newArr.push(el)
//         console.log(el, 'i am just reg non array element')
//       }
//     }
//     return newArr
//   }
flatten([[1],[2],3,[[4,5]], [6, 7]])

最佳答案

您在 for 循环中缺少 ivarlet 声明以使其本地化,因此每次调用 flatten 时,该值都会重置。改变

for (i=0; i < arr.length; i++) {

for (var i=0; i < arr.length; i++) {

代码按预期工作:

const flatten = (arr) => {
    let newArr = []
    for (let i=0; i < arr.length; i++) {
        if(Array.isArray(arr[i])) {
            newArr = [...newArr, ...flatten(arr[i])]
        } else {
            newArr.push(arr[i])
        }
    }
    return newArr
}
console.log(flatten([[1],[2],3,[[4,5]], [6, 7]]))

关于javascript - for of 和 for 循环不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59998587/

相关文章:

r - 如何通过 R 中的 dplyr/tidyverse 将分组行复制到列中?

javascript - ng-repeat 不重复特定元素

javascript - Mandelbrot 设置渲染速度太慢

C程序打印100到1000之间的数字,数字之和为20

c - for 循环中的相等性测试

reactjs - 这是将 Prop 传递给 React 中的子组件的好方法吗?

javascript - 尝试使用扩展运算符创建数组的副本,但有些数组是如何变异的

javascript - 单击 Bootstrap 文本输入中的图标

javascript - 这个 Google 脚本有什么问题?

python - 为什么 numpy 比 for 循环慢