For Loop | Object keeps its value?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-05-2022 06:37 AM
Hello,
below you can see 2 scripts, the only difference is the setting of the variable "release_year_obj" once outside and once inside the For loop.
Why in the first example, is always only Q4/2022 pushed into the array?
The logs before show that there should be a different quarter as value in the object key quartal per loop.
I hope you understand my question
function getReleases() {
var releases = [];
var year = '2022';
var quartal = '';
var release_year_obj = {};
for (var i = 1; i < 5; i++) {
if (i == 1) {
quartal = "Q" + i + "/" + year;
} else if (i == 2) {
quartal = "Q" + i + "/" + year;
} else if (i == 3) {
quartal = "Q" + i + "/" + year;
} else {
quartal = "Q" + i + "/" + year;
}
release_year_obj.quartal = quartal;
gs.log("quartal: " + release_year_obj.quartal)
releases.push(release_year_obj);
}
return releases;
}
gs.log("Object: " + JSON.stringify(getReleases()));
--------------------------------------------------
function getReleases() {
var releases = [];
var year = '2022';
var quartal = '';
for (var i = 1; i < 5; i++) {
var release_year_obj = {};
if (i == 1) {
quartal = "Q" + i + "/" + year;
} else if (i == 2) {
quartal = "Q" + i + "/" + year;
} else if (i == 3) {
quartal = "Q" + i + "/" + year;
} else {
quartal = "Q" + i + "/" + year;
}
release_year_obj.quartal = quartal;
gs.log("quartal: " + release_year_obj.quartal)
releases.push(release_year_obj);
}
return releases;
}
gs.log("Object: " + JSON.stringify(getReleases()));

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-05-2022 08:00 AM
Hi,
Not sure if my logic is correct or not.
In first case you have declared an object release_year_obj outside for loop, that means it was initialized once and space was allocated to it once.
In this case value is stored to same address (value was overwritten while preparing response)and that address was referred while returning data from function.
In second case you have declared an object release_year_obj inside for loop, and it is being initialized in every iteration and space was allocated 4 times. So at the time of returning four different addresses were referred and it returned correct data.
Not sure how JavaScript engine is processing but this.
In first case if you do it like below then it will store actual value in array instead of address and you will get all four quarters:
releases.push(JSON.stringify(release_year_obj));
Thanks,
Anil Lande
Thanks
Anil Lande
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-05-2022 11:21 PM
Thanks for your answer and the time spent on it