for of 和 for 循环不同的结果
For of and for loop different results
谁能解释一下,为什么使用常规 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
循环中缺少 i
的 var
或 let
声明以使其成为本地,因此每次调用 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]]))
谁能解释一下,为什么使用常规 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
循环中缺少 i
的 var
或 let
声明以使其成为本地,因此每次调用 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]]))