React Native Multidimension Array合并与JavaScript中的一个具有特定键的数组

yb3bgrhw  于 6个月前  发布在  React
关注(0)|答案(4)|浏览(77)

我有一个像下面这样的数组

[
 {
"__typename": "ConfigurableProduct",
"uid": "MzY3",
"name": "AISLING BODYSUIT",
"crosssell_products": [
  {
    "__typename": "ConfigurableProduct",
    "uid": "NTI=",
    "name": "Product 1"
  },
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 2"
  },
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 3"
   }
  ]
 },
{
"__typename": "ConfigurableProduct",
"uid": "MzI4",
"name": "CERYS BODYSUIT",
"crosssell_products": [
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 4"
  },
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 5"
  },
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 6"
   }
 ]
}
]

字符串
我想要的数据是包含crossell_products数组它意味着我想要下面的格式单一数组

"crosssell_products": [
  {
    "__typename": "ConfigurableProduct",
    "uid": "NTI=",
    "name": "Product 1"
  },
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 2"
  },
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 3"
  },
   {
    "__typename": "ConfigurableProduct",
    "name": "Product 4"
  },
   {
    "__typename": "ConfigurableProduct",
    "name": "Product 5"
  },
   {
    "__typename": "ConfigurableProduct",
    "name": "Product 6"
  },
]


我试过下面的代码,但不工作

let aa = getRelatedData?.products?.items.reduce(function (a, b) {
  return a.concat(b);
}, []);

u5i3ibmn

u5i3ibmn1#

您可以在JavaScript中使用flatMap() Operator来完成一个flatten数组。

参考官方文档here

var arr = [
 {
"__typename": "ConfigurableProduct",
"uid": "MzY3",
"name": "AISLING BODYSUIT",
"crosssell_products": [
  {
    "__typename": "ConfigurableProduct",
    "uid": "NTI=",
    "name": "Product 1"
  },
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 2"
  },
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 3"
   }
  ]
 },
{
"__typename": "ConfigurableProduct",
"uid": "MzI4",
"name": "CERYS BODYSUIT",
"crosssell_products": [
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 4"
  },
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 5"
  },
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 6"
   }
 ]
}
];

const results = arr.flatMap(v => v.crosssell_products);
console.log(results)

字符串

ux6nzvsh

ux6nzvsh2#

您需要使用flatMapmap将返回数组的数组,因此需要使用flatMap

const res = getRelatedData.flatMap(el => el.crosssell_products);
console.log(res);

字符串
你也可以使用迭代和减少的方法:

const res = getRelatedData.reduce((acc, el) => acc.concat(el.crosssell_products), []);
console.log(res);


但是flatMap更简洁,更好地说明了意图。

const getRelatedData = [
  {
    "__typename": "ConfigurableProduct",
    "uid": "MzY3",
    "name": "AISLING BODYSUIT",
    "crosssell_products": [
      {
        "__typename": "ConfigurableProduct",
        "uid": "NTI=",
        "name": "Product 1"
      },
      {
        "__typename": "ConfigurableProduct",
        "name": "Product 2"
      },
      {
        "__typename": "ConfigurableProduct",
        "name": "Product 3"
       }
      ]
     },
    {
    "__typename": "ConfigurableProduct",
    "uid": "MzI4",
    "name": "CERYS BODYSUIT",
    "crosssell_products": [
      {
        "__typename": "ConfigurableProduct",
        "name": "Product 4"
      },
      {
        "__typename": "ConfigurableProduct",
        "name": "Product 5"
      },
      {
        "__typename": "ConfigurableProduct",
        "name": "Product 6"
       }
     ]
  }
];
const res = getRelatedData.flatMap(el => el.crosssell_products);
console.log(res);

s1ag04yj

s1ag04yj3#

尝试Array.flatMap()如下

const flattenedCrossSellProducts = products.flatMap(product => product?.crosssell_products || []);
console.log(flattenedCrossSellProducts);

字符串
这不会失败,即使crosssell_products在数组中不存在或未定义。

const products = [
  {
    "__typename": "ConfigurableProduct",
    "uid": "MzY3",
    "name": "AISLING BODYSUIT",
    "crosssell_products": [
      {
        "__typename": "ConfigurableProduct",
        "uid": "NTI=",
        "name": "Product 1"
      },
      {
        "__typename": "ConfigurableProduct",
        "name": "Product 2"
      },
      {
        "__typename": "ConfigurableProduct",
        "name": "Product 3"
      }
    ]
  },
  {
    "__typename": "ConfigurableProduct",
    "uid": "MzI4",
    "name": "CERYS BODYSUIT",
    "crosssell_products": [
      {
        "__typename": "ConfigurableProduct",
        "name": "Product 4"
      },
      {
        "__typename": "ConfigurableProduct",
        "name": "Product 5"
      },
      {
        "__typename": "ConfigurableProduct",
        "name": "Product 6"
      }
    ]
  }
];

// Use flatMap to extract and flatten the crosssell_products arrays
const flattenedCrossSellProducts = products.flatMap(product => product?.crosssell_products || []);

console.log(flattenedCrossSellProducts);

w1e3prcc

w1e3prcc4#

您可以使用map创建一个新数组,该数组仅包含原始数组中每个对象的crosssell_products数组。然后,concat将这些数组合并组合成一个数组,并将组合后的数组分配给新对象的crosssell_products属性。

let originalArray = [
 {
"__typename": "ConfigurableProduct",
"uid": "MzY3",
"name": "AISLING BODYSUIT",
"crosssell_products": [
  {
    "__typename": "ConfigurableProduct",
    "uid": "NTI=",
    "name": "Product 1"
  },
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 2"
  },
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 3"
   }
  ]
 },
{
"__typename": "ConfigurableProduct",
"uid": "MzI4",
"name": "CERYS BODYSUIT",
"crosssell_products": [
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 4"
  },
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 5"
  },
  {
    "__typename": "ConfigurableProduct",
    "name": "Product 6"
   }
 ]
}
]

let crosssellProductsArrays = originalArray.map(item => item.crosssell_products);
let combinedArray = [].concat(...crosssellProductsArrays);
let result = {
 "crosssell_products": combinedArray
};
console.log(result);

字符串

相关问题