Reputation: 363
I'm trying to test something in javascript with an array and object here is what I'm trying to do:
const data = [
{
name: "Order A",
orderItems: [
{
qty: [2, 2, 2],
products: [
{ name: "Product A" },
{ name: "Product B" },
{ name: "Product C" },
],
},
],
},
];
const dataName = data.map(({ name }) => {
return name;
});
const product = data.map(({ orderItems }) => {
return orderItems.map(({ qty, products }) => {
return products.map(({ name }) => {
return name + qty;
});
});
});
console.log(`This is ${dataName} with ${product}`);
I want it to return something like A2
, B2
, and C2
but it returns something like A2,2,2
B2,2,2
C2,2,2
I know I did something wrong. If you need anymore clarification please let me know.
Upvotes: 3
Views: 127
Reputation: 452
Try this? Don't forget you've got an index as the second param of array methods, and i think - you just need to use it to solve your problem :)
const ret = data.flatMap(({orderItems}) => orderItems).flatMap(({qty, products}) => {
return qty.flatMap((quantity, index) => ({quantity, name: products[index].name}))
});
ret.forEach(({name, quantity})=>console.log(name, quantity))
Upvotes: 1
Reputation: 51711
You're concatenating the whole qty
array. Pass the products
array index and concatenate the corresponding qty
instead.
const product = data.map(({ orderItems }) => {
return orderItems.map(({ qty, products }) => {
return products.map(({ name }, i) => {
return name + qty[i];
});
});
});
console.log(`This is ${dataName} with ${product}`);
Output
This is Order A with Product A2,Product B2,Product C2
Upvotes: 4