如何在数组中插入包含不同对象的另一个数组

3

我正在尝试用JavaScript测试一个涉及数组和对象的功能,以下是我的代码:

代码:

    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}`);

我希望它返回像A2B2C2这样的东西,但它返回了像A2,2,2B2,2,2C2,2,2这样的东西。我知道我做错了什么。如果需要更多的澄清,请告诉我。

当你执行 name + qty 时,qty 变量是一个完整的数组... 此外,你的数据对象不太好,如果它包含这种类型的对象 {name: 'Product A', qty: 2},那么处理产品数组会更容易。 - TJBlackman
是的,我也考虑过像 {name: 'Product A', qty: 2} 这样的方式,就像你所说的那样,但我需要一种让它变成类似于那样的方法。如果可能的话,你能做出这样的东西吗? - Mohammad Khan
2个回答

4
你正在串联整个 qty 数组。传递 products 数组的索引,然后串联相应的 qty
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}`);

输出

This is Order A with Product A2,Product B2,Product C2

1

试试这个?不要忘记数组方法的第二个参数是索引,我认为 - 你只需要使用它来解决你的问题 :)

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

你好,感谢你的回答,它也起作用了。:)) - Mohammad Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接