У меня есть этот массив const idArray = ["12", "231", "73", "4"]
и объект
const blueprints = {
12: {color: red, views: [{name: "front}, {name: "back}, {name: "top}, {name: "bottom}]},
231: {color: white, views: [{name: "front}, {name: "back}]},
73: {color: black, views: [{name: "front}, {name: "back}, {name: "top}, {name: "bottom}]},
4: {color: silver, views: [{name: "front}, {name: "back}, {name: "top}, {name: "bottom}]},
}
Как я могу вернуть массив следующих объектов, которые имеют все front , back , top и bottom , используя ES6 map/filter/some
и т. Д.?:
result =[
{colorId: "12", views: [{name: "front}, {name: "back}, {name: "top}, {name: "bottom}]}
{colorId: "73", views: [{name: "front}, {name: "back}, {name: "top}, {name: "bottom}]}
{colorId: "4", views: [{name: "front}, {name: "back}, {name: "top}, {name: "bottom}]}
]
Я сделал это здесь, но мне кажется, что это слишком грязно и трудно для чтения. Кто-нибудь может порекомендовать, как сократить его и сделать его проще для чтения с помощью функций ES6 (карта, фильтр ...)?
const result = idArray.map(id => {
const bluePrint = bluePrints[id];
const exists = blurPrint.views.some(view => view.name === 'top' || view.name === 'bottom');
if (exists) {
return {
colorId: id,
views: bluePrint.views
}
}
}).filter(bluePrint => !bluePrint);