3

I'm trying to test something in javascript with an array and object here is what I'm trying to do:

CODE:

    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.

2
  • When you do name + qty the qty variable is an entire array.... Also, your data object isn't great, your products array would be easier to deal with if it contained this type of object {name: 'Product A', qty: 2} Commented Aug 6, 2021 at 13:34
  • Yes, I had also think of a way like that {name: 'Product A', qty: 2} the one you are saying but I need a way to make it something like that. If possible could you make something like that? Commented Aug 6, 2021 at 13:37

2 Answers 2

4

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
Sign up to request clarification or add additional context in comments.

Comments

1

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))

1 Comment

Hello, thanks for answering it also worked. :))

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.