0

谁能解释一下,为什么使用常规 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]])
4

1 回答 1

4

您在循环中缺少一个varorlet声明以使其成为本地,因此每次调用该值时都会重置。改变iforflatten

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]]))

于 2020-01-31T06:16:38.077 回答