Reputation: 5390
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?
Upvotes: 5
Views: 8754
Reputation: 6299
If you log objects in the latest versions of Chrome and Firefox, what you get logged on the console is a reference to the object, which is not necessarily the 'value' of the object at the moment in time you call console.log()
, but it is the value of the object at the moment you open the console.
Upvotes: 0
Reputation: 944171
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.
Upvotes: 14