I have an array of ID's as below:
[121, 432, 322]
I want all of it to be added to an array in the following format (Expected Output):
[
{
"term": {
"brand_id": 121
}
},
{
"term": {
"brand_id": 432
}
},
{
"term": {
"brand_id": 322
}
}
]
I am able to get the structure right and get a result almost as expected. But am ending up having just the last value as the value in all items of the object as below (Current Output):
[
{
"term": {
"brand_id": 322
}
},
{
"term": {
"brand_id": 322
}
},
{
"term": {
"brand_id": 322
}
}
]
My code is as below:
The array of IDs is in an array named brands.
let brands_formated = [];
//I have the array stored in `brands`
let format = { "term" : {
"brand_id": 0 //will be replaced
}
};
brands.forEach(function(brand) {
//The structure for brand query
format.term.brand_id = brand;
//Check if the right brand is format. Outputs as desired.
console.log(format);
brands_formated.push(format);
});
Though console.log
in loop confirms am iterating correctly. The final output just has one value.
You currently only have one variable for format
- you're only ever pushing one item to the array, you're just mutating it multiple times, resulting in the array containing 3 references to the same object.
Create the format
on each iteration instead. .map
is more appropriate than .forEach
when transforming one array into another:
const input = [121, 432, 322];
console.log(
input.map(brand_id => ({ term: { brand_id }}))
);
While this answer explained the problem of your code. Here is my way to solve the same problem.
const input = [121, 432, 322];
Array.from(input, brand_id => ({ term: { brand_id }}))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With