Вы можете использовать Object # values , чтобы получить массивы, соответствующие appetizer
и main
, а затем Array # flat , чтобы извлечь вложенные объекты в преобразованный массив.Затем используйте Array#filter
(который вы уже используете), чтобы отфильтровать только требуемые объекты на основе вашего состояния, а затем Array # map , чтобы получить значения name
и image
из каждого отфильтрованногообъект в массив объектов.
Пожалуйста, рассмотрите следующие фрагменты
const jsonData = {"appetizer":[{"num":"appetizer1","name":"salad","condition":["1","2"],"image":"./appetizer/salad.png"},{"num":"appetizer2","name":"soup","condition":["2","3"],"image":"./appetizer/soup.png"}],"main":[{"num":"main1","name":"beef","condition":["1"],"image":"./main/beef.png"},{"num":"main2","name":"fish","condition":["2","3"],"image":"./main/fish.png"}]};
const filteredValues = Object.values(jsonData)
.flat()
.filter(o => o.condition.includes('2'))
.map(({name, image}) => ({ name, image }));
console.log(filteredValues);
Результатом вышеприведенного кода будет массив объектов, имеющих следующую структуру
[{
"name": SOME_NAME,
"image": SOME_PATH
},
{
"name": SOME_NAME,
"image": SOME_PATH
},
...
]
Вы можете использовать указанный выше массив для получения вашего image
путь и отобразите его соответственно.
Я думаю, вам не стоит беспокоиться о base64
, поскольку изображения хранятся локально, и path
будет достаточно для отображения изображения.
Надеюсьэто поможет !!!
Side Примечание: Вы можете избежать части Array#flat
, поскольку вы уже делаете это вручную [...JsonData["apptizer"], ...JsonData["main"]]
, но flat
будет удобно в случае, если естьбольше ключей в jsonData
, которые необходимо учитывать.