How to create single array for same producId but different values of productImage and productImageId with unique productId but having different productImage,productImageId with same productId i want productImage,productImageId should be an array and with same productId.
var arr1 = [
{
"productID": 85,
"productImageID": 24801,
"productImages": "1588578164781.jpg"
},
{
"productID": 85,
"productImageID": 24802,
"productImages": "1588578164783.jpg"
},
{
"productID": 84,
"productImageID": 24799,
"productImages": "1588575322312.jpeg"
},
{
"productID": 84,
"productImageID": 24800,
"productImages": "1588575322346.png"
}];
var aar2 = [
{
"productID": 85,
"productTitle": "Product Name",
"productDesc": "Product Description",
"productPrice": 140,
"productComparePrice": 120,
"isFeatured": 0
}, {
"productID": 84,
"productTitle": "Jeans test",
"productDesc": "Wrist Black",
"productPrice": 420,
"productComparePrice": 12,
"isFeatured": 1
}]
I want output as expected below:
output =[
{
"productID": 85,
"productTitle": "Product Name",
"productDesc": "Product Description",
"productPrice": 140,
"productComparePrice": 120,
"isFeatured": 0,
"productImages": [
{
"productImageID": 24801,
"productImages": "1588578164781.jpg"
},
{
"productImageID": 24802,
"productImages": "1588578164783.jpg"
}
]
},
{
"productID": 84,
"productTitle": "Jeans test",
"productDesc": "Wrist Black",
"productPrice": 420,
"productComparePrice": 12,
"isFeatured": 1,
"productImages": [
{
"productImageID": 24799,
"productImages": "1588575322312.jpeg"
},
{
"productImageID": 24800,
"productImages": "1588575322346.png"
}
]
}
]
-
can you use a map / object with the ids as keys instead of an array?0x4b50– 0x4b502020年05月05日 09:55:01 +00:00Commented May 5, 2020 at 9:55
-
What did you try?Christian Vincenzo Traina– Christian Vincenzo Traina2020年05月05日 09:57:40 +00:00Commented May 5, 2020 at 9:57
4 Answers 4
I think this should work for you. But probably you need to solve it in another way, you can join data queering from the database or if these collections are produced by fronted you can use JavaScript objects to easily get entities by its ID.
const output = aar2.map(product => ({
...product,
productImages: arr1.filter(image => image.productID === product.productID)
}));
You can do it using reduce. Try this:
var arr1 = [{"productID": 85, "productImageID": 24801, "productImages": "1588578164781.jpg"}, {"productID": 85, "productImageID": 24802, "productImages": "1588578164783.jpg"}, {"productID": 84, "productImageID": 24799, "productImages": "1588575322312.jpeg"}, {"productID": 84, "productImageID": 24800, "productImages": "1588575322346.png"}];
var arr2 = [{"productID": 85, "productTitle": "Product Name", "productDesc": "Product Description", "productPrice": 140, "productComparePrice": 120, "isFeatured": 0}, {"productID": 84, "productTitle": "Jeans test", "productDesc": "Wrist Black", "productPrice": 420, "productComparePrice": 12, "isFeatured": 1}];
const res = arr1.reduce((a, c) => {
const index = a.findIndex(item => item.productID === c.productID);
if (index > -1) {
a[index].productImages = a[index].productImages || [];
a[index].productImages.push(c);
}
return a;
}, arr2);
console.log(res);
.as-console-wrapper{min-height: 100%!important; top: 0;}
Comments
aar2.map(a => {
let arr1Elements = arr1.filter(b => a.productID === b.productID);
a.productImages = [];
arr1Elements.forEach(c => a.productImages.push({ productImageID: c.productImageID, productImages: c.productImages }));
return a;
});
Comments
const newArray = aar2;
newArray.forEach((item, index) => {
const id = item.productID;
const imageArray = arr1.filter((img) => img.productID === id);
aar2[index].productImages = [];
imageArray.forEach((img) => {
delete img.productID; // Remove productID from the array
aar2[index].productImages.push(img);
})
});