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));
我现在将代码片段应用于更新后的数据。结果数组 motor
和 sizes
是通过在 data
数组上应用 .filter()
来计算的。
在这个更新版本的脚本中,我将 brand
分配给 mo
或 si
数组,如果它以某种方式包含 属性 motor
或尺寸`.
我正在尝试使用第一个数组中的值将此数组拆分为两个不同的数组。
这是我的初始数组:
"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));
我现在将代码片段应用于更新后的数据。结果数组 motor
和 sizes
是通过在 data
数组上应用 .filter()
来计算的。
在这个更新版本的脚本中,我将 brand
分配给 mo
或 si
数组,如果它以某种方式包含 属性 motor
或尺寸`.