for循环使我在某些数字上不确定,并且基本的for循环工作正常为什么是这样?

问题描述

有人可以向我解释这种奇怪的行为吗?当我使用for循环时,似乎是控制台记录了2,5,但其余未定义。但是,第二个代码块中的普通for循环基本上会打印出所有数字。非常感谢!

function sort(arr){
    let items=arr.slice()
    console.log(items)
    for(let i of items){
        console.log(items[i])
        for(let j of items){
            if(items[j]<items[i]){
                // console.log(items[j])
                // console.log(items[i])
                let tmp = items[i]
                // console.log(tmp)
                items[j]=items[i]
                // console.log(items[j])
                items[i]=tmp
                // console.log(items[i])
            }
        }
    }
    return items;
}

let items = [4,1,5,3,2]
let sortItems = sort(items)


//VS//


function sort(arr){
    let items=arr.slice()
    console.log(items)
    for(let i = 0;i<items.length;i++){
        console.log(items[i])
        for(let j of items){
            if(items[j]<items[i]){
                // console.log(items[j])
                // console.log(items[i])
                let tmp = items[i]
                // console.log(tmp)
                items[j]=items[i]
                // console.log(items[j])
                items[i]=tmp
                // console.log(items[i])
            }
        }
    }
    return items;
}

let items = [4,2]
let sortItems = sort(items)

解决方法

for..of遍历数组中的,而不是其索引。例如,您会发现代码执行失败的时间很早

let items = [4093,1633,511,364,2642]

(例如,列表中的值不为0..4)。