2 回答
![?](http://img1.sycdn.imooc.com/533e4cde000148e602000200-100-100.jpg)
TA贡献1895条经验 获得超7个赞
您可以使用_idas 键创建一个对象并调用该函数,直到获得图像。
function getCategoryImageByByCategoryId(id) {
return reference[id].image
|| getCategoryImageByByCategoryId(reference[id].rootCategoryId);
}
var data = [{ _id: 1, image: "/static/categories/apartment.png", name: "apartments", properties: [], rootCategoryId: null }, { _id: 2, image: "/static/categories/car.png", name: "cars", properties: [], rootCategoryId: null }, { _id: 3, image: "/static/categories/dress.png", name: "cloathes", properties: [], rootCategoryId: null }, { _id: 4, image: "/static/categories/fridge.png", name: "electronicsAndGadgets", properties: [], rootCategoryId: null }, { _id: 99, image: "/static/categories/phone.png", name: "smartPhones", properties: [], rootCategoryId: 4 }, { _id: 100, image: null, name: "shoes", properties: [], rootCategoryId: 3 }, { _id: 1000, image: null, name: "sneakers", properties: [], rootCategoryId: 100 }, { _id: 1001, image: null, name: "sandals", properties: [], rootCategoryId: 100 }],
reference = data.reduce((r, o) => {
r[o._id] = o;
return r;
}, {});
console.log(getCategoryImageByByCategoryId(1000));
![?](http://img1.sycdn.imooc.com/54584dc4000118d302200220-100-100.jpg)
TA贡献1868条经验 获得超4个赞
请注意以下调用:
const getCategory = (id) => _.find(categoriesList, category => category._id === id);
表示可能必须迭代整个数组(最坏情况)的迭代。这具有O(n)时间复杂度。
而是准备一张地图,以便您可以在恒定时间内通过其 id 识别类别:
let map = new Map(state.categories.categoriesList.map(category => [category._id, category]));
只要此列表未更改,您也不必重复创建此地图。获得后,您只需按 id 检索类别,如下所示:
category = map.get(id);
其次,从您的问题来看,您是否真的需要一个数组作为返回值并包含指向根的整个路径的数组尚不清楚。如果您真正关心的是获取图像,那么您不应该需要该数组,并且您应该在发现 的非null
值后立即退出循环category.image
,并返回它。
添加回答
举报