简体   繁体   中英

Can't get inside my for loop (Javascript)

I am trying to iterate over the variable pieces , but somehow it is not triggering. In the function below, pieces.length turns 4, but piecesNew turns [] - moreover console.log(i) is never reached.

What is happening?

self.reworkPieces = function(pieces) {

        var piecesNew = [];

        console.log(pieces.length)

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

            console.log(i)

            piecesNew[i] = {
                c: pieces[i].r,
                r: pieces[i].c,
                p: i
            }

        }

        console.log(piecesNew)

        return piecesNew;

    }; 

undefined is not less than or greater than any number.

var i; // undefined
i < 10; // false
i > 10; // false

You simply need to make sure i is equal to 0 .

You also want i to never be equal to pieces.length so use < instead of <= (the last index of an array is always length - 1 , eg an array of length 3 has indexes 0, 1 and 2 – the first index is always 0, not 1)

So:

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

define value for variable i, var i = 0

self.reworkPieces = function(pieces) {

        var piecesNew = [];

        console.log(pieces.length)

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

            console.log(i)

            piecesNew[i] = {
                c: pieces[i].r,
                r: pieces[i].c,
                p: i
            }

        }

        console.log(piecesNew)

        return piecesNew;

    }; 
self.reworkPieces = function(pieces) {

    var piecesNew = [];

    console.log(pieces.length)

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

        console.log(i)

        piecesNew[i] = {
            c: pieces[i].r,
            r: pieces[i].c,
            p: i
        }

    }

    console.log(piecesNew)

    return piecesNew;

}; 

Change:

 for (var i; i <= pieces.length; i++)

To:

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

Initialize var i = 0 initially then it will work

self.reworkPieces = function(pieces) {

            var piecesNew = [];

            console.log(pieces.length)

            for (var i = 0; i <= pieces.length - 1; i++) {

                console.log(i)

                piecesNew[i] = {
                    c: pieces[i].r,
                    r: pieces[i].c,
                    p: i
                }

            }

            console.log(piecesNew)

            return piecesNew;

        }; 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM