It will give data by checking for each variant
inside the variant array, it show all the object if the condition matched or undefined if not, but in this particular code, it is creating a new array for each item, something like this :-
[{id: 'something'}] [{id: 'something'}] [{id: 'something'}] [{id: 'something'}]
I want it to have all the result inside one array:-
[
{id: 'something'},
{id: 'something'},
{id: 'something'},
{id: 'something'}
]
const mynewarr = [];
const myimages = product_details.data.product.images;
for(var i = 0; i < product_details.data.product.variants.length; i++) {
const myvari = product_details.data.product.variants[i].image_id;
const real = myimages.find(imageid => imageid.id == myvari);
mynewarr.push(real);
}
Just use a destructuring assignment to "unpack" the array before the push.
mynewarr.push(...real);
If I understand correctly you need to go:
const newArray = product_details.data.product.variants.map((variant) => variant.image_id === 'your_condition' ? { id: variant.image_id } : undefined)
The newArray
will contain an array of objects with the ids.
Since your myimages
is an array of array, you can push the object by accessing the 0th index of the filtered item(using .find
).
If there's a possibility that the .find
method might return undefined
you can add a conditional check to push only the found items.
You can update your code to something like the below.
const mynewarr = [];
const myimages = product_details.data.product.images;
for(var i = 0; i < product_details.data.product.variants.length; i++){
const myvari = product_details.data.product.variants[i].image_id;
const real = myimages.find(imageid => imageid.id === myvari)
if(real){
mynewarr.push(real[0]); //Add only the object and not the sub array.
}
}