javascript 将数组拆分为两个数组

javascript split array in two arrays

我正在尝试使用第一个数组中的值将此数组拆分为两个不同的数组。

这是我的初始数组:

    "carList": [
      {
        "brand": [
          {
            "model": [
              { "motor": { "id": 1 }, "color": 10 },
              { "motor": { "id": 2 }, "color": 20 },
              { "motor": { "id": 3 }, "color": 30 },
              { "motor": { "id": 4 }, "color": 40 }
            ]
          }
        ]
      },
      { "brand": [{ "model": [{ "size": 400 }] }] },
      { "brand": [{ "model": [{ "size": 500 }] }] }
    ],

第一个数组必须包含带有电机和颜色的模型。第二个应该只包含具有尺寸的品牌(我可以有不确定数量的品牌)。

我希望这样作为输出:

    "carList": [
      {
        "brand": [
          {
            "model": [
              { "motor": { "id": 1 }, "color": 10 },
              { "motor": { "id": 2 }, "color": 20 },
              { "motor": { "id": 3 }, "color": 30 },
              { "motor": { "id": 4 }, "color": 40 }
            ]
          }
        ]
      },
    ],
    "carList": [
      { "brand": [{ "model": [{ "size": 400 }] }] },
      { "brand": [{ "model": [{ "size": 500 }] }] }
    ],

当尝试拆分数组时,我试图创建仅具有大小的数组,但我得到了 carList global:

const carList1 = carList.filter((x) =>
    x.brand.filter((y) => y.model.filter((z) => z.size)
   );

我如何拆分数组并获得此输出?

更新 这是我比较通用的例子测试我可以有很多品牌和型号,

   "carList": [
      {
        "brand": [
          {
            "model": [
              { "motor": { "id": 1 }, "color": 10 },
              { "motor": { "id": 2 }, "color": 20 },
              { "motor": { "id": 3 }, "color": 30 },
              { "motor": { "id": 4 }, "color": 40 }
            ]
          },
          {
            "model": [
              { "motor": { "id": 1 }, "color": 11 },
              { "motor": { "id": 2 }, "color": 22 },
              { "motor": { "id": 3 }, "color": 33 },
              { "motor": { "id": 4 }, "color": 44 }
            ]
          }
        ]
      },
      { "brand": [
         { 
           "model": [
             { "size": 400 },
           ]
         },
         {
            "model": [
             { "size": 401 }
           ]
         },
      { "brand": [{ "model": [{ "size": 500 }] }] }
    ],

这是一种方法:

const data={"carList":[
   {"brand":[{"model": [{ "motor": { "id": 1 }, "color": 10 },
                        { "motor": { "id": 2 }, "color": 20 },
                        { "motor": { "id": 3 }, "color": 30 },
                        { "motor": { "id": 4 }, "color": 40 }]},
             {"model": [{ "motor": { "id": 1 }, "color": 11 },
                        { "motor": { "id": 2 }, "color": 22 },
                        { "motor": { "id": 3 }, "color": 33 },
                        { "motor": { "id": 4 }, "color": 44 }]}
            ]},
   {"brand":[{"model": [{ "size": 400 }]},
             {"model": [{ "size": 401 }]}]},
   {"brand":[{"model": [{ "size": 500 }]}]} 
]}

const [mo,si]=["motor","size"].map(p=>data.carList.filter(e=>
  e.brand.find(b=>b.model.find(m=>m[p]))));

console.log(JSON.stringify(mo));
console.log(JSON.stringify(si));

我现在将代码片段应用于更新后的数据。结果数组 motorsizes 是通过在 data 数组上应用 .filter() 来计算的。

在这个更新版本的脚本中,我将 brand 分配给 mosi 数组,如果它以某种方式包含 属性 motor 或尺寸`.