Я пытаюсь разбить этот массив на два разных массива, используя значения внутри первого массива.
Это мой исходный массив:
"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:
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.info(JSON.stringify(mo));
console.info(JSON.stringify(si));
Теперь я применил фрагмент к обновленным данным. Массивы результатов motor
и sizes
вычисляются путем применения .filter()
к массиву data
.
В этой обновленной версии скрипта я присваиваю brand
массиву mo
или si
, если он каким-то образом содержит свойство motor
или размер`.
Не могли бы вы расширить свои примеры данных, чтобы показать этот более общий тестовый пример и точно объяснить что бы вы хотели, чтобы произошло, если в одной ветке brand
мы должны найти оба, motor
и модель типа size
.
Я обновляю свой пример более общим тестовым случаем
У меня может быть номер модели, марки, я должен зацикливаться на марке
спасибо @Carsten Massmann, это идеально, я могу адаптировать для своего проекта
Да, это работает, но если у меня есть две модели этой марки: