Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does console.log wrongly print an empty array?

I use Firefox.

This code logs [].

var log = console.log;

function new_comb(aComb) {
    var res = [];
    log(aComb); // <- This is the line
    for (var p in aComb) {
        var peg = aComb[p];
        var current = peg[peg.length - 1];
        for (var i = 0; i < aComb.length; i++) {
            if (i == p) continue;
            if (current > aComb[i][aComb[i].length - 1]) continue;
            var tmp = aComb.splice(0);
            tmp[i].push(current);
            tmp[p].pop();
            res.push(tmp);
        }
    }
    return res;
}

var comb = [
    [3, 1],
    [9, 2],
    [15, 0]];
var res = new_comb(comb);

This code logs the correct value.

var log = console.log;

function new_comb(aComb) {
    var res = [];
    log(aComb); // <- This is the line
    // note that I comment this out.
    /*for (var p in aComb) {
        var peg = aComb[p];
        var current = peg[peg.length - 1];
        for (var i = 0; i < aComb.length; i++) {
            if (i == p) continue;
            if (current > aComb[i][aComb[i].length - 1]) continue;
            var tmp = aComb.splice(0);
            tmp[i].push(current);
            tmp[p].pop();
            res.push(tmp);
        }
    }*/
    return res;
}

var comb = [
    [3, 1],
    [9, 2],
    [15, 0]];
var res = new_comb(comb);

Why is this happening?

like image 290
batman Avatar asked Aug 14 '13 11:08

batman


People also ask

Does console log equal print?

The only notable difference between the two is that, when printing an object, console. log gives special treatment to HTML elements, while console.

Why does console log work but not return?

console. log will log to the console (as the name suggests) while return just ends the function and passes the value to whatever called that function. Since you're not using that return value, you won't see anything but it is produced.

Does console log return anything?

console. log(A); Parameters: It accepts a parameter which can be an array, an object or any message. Return value: It returns the value of the parameter given.

What is the result of console log?

The console. log() method outputs a message to the web console. The message may be a single string (with optional substitution values), or it may be any one or more JavaScript objects.


1 Answers

console.log shows live data, not a snapshot of the object at the time you run it.

Since you splice all the data out of the array, it is empty almost as soon as you log it.

Stringify or deep copy the array if you want to log a snapshot of it.

like image 164
Quentin Avatar answered Oct 21 '22 15:10

Quentin