javascript - 过滤数组并根据另一个数组重新排序数组
问题描述
所以我有一个数组userAccessArray
,每个用户都有基于该数组可以访问的所有内容,我正在检查predefinedArrayList
所有对象来自应用程序的位置并创建一个新的对象数组。[过滤它]
之后我根据另一个数组重新排列顺序。这就是我的最终结果。
下面是代码,它可以工作,但我认为应该有更好的方法。
let predefinedList = [{name: "Home Page", path:"/home"},{name: "About Page", path:"/about"}, {name: "Edit Page", path:"/edit"}, {name: "Admin Page", path:"/admin"} ]
let userAccessArray = ["editing", "aboutUs", "home"]
let userAccessList = userAccessArray.map(userAccess => {
if(userAccess === "aboutUs"){
return predefinedList[1]
}else if(userAccess === "editing"){
return predefinedList[2]
}else if(userAccess === "home"){
return predefinedList[0]
}else if(userAccess === "adminAccess"){
return predefinedList[3]
}
})
const orderOfTabs = ["Home Page", "Edit Page", "About Page", "Admin Page"]
const finalTabsArray = orderOfTabs.map(orderOfTab => userAccessList.find(userAccess => userAccess.name === orderOfTab)).filter(item => item)
console.log("finalTabsArray", finalTabsArray)
解决方案
我建议使用一个access
用于过滤的属性和一个用于对具有未知属性predefinedList
的默认值的项目进行排序的对象。name
在这种情况下,这些项目通过一个巨大的 value 排序在列表的末尾Infinity
。
const
orderOfTabs = { "Home Page": 1, "Edit Page": 2, "About Page": 3, "Admin Page": 4, default: Infinity },
predefinedList = [{ name: "Home Page", path:"/home", access: "home" }, { name: "About Page", path:"/about", access: "aboutUs" }, { name: "Edit Page", path:"/edit", access: "editing" }, { name: "Admin Page", path:"/admin", access: "adminAccess" }],
userAccessArray = ["editing", "aboutUs", "home"],
finalTabsArray = predefinedList
.filter(({ access }) => userAccessArray.includes(access))
.sort(({ name: a }, { name: b }) =>
(orderOfTabs[a] || orderOfTabs.default) - (orderOfTabs[b] || orderOfTabs.default));
console.log(finalTabsArray);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- sql - 如何在Oracle中搜索一行是否是同一列的另一行的子字符串
- reactjs - 我如何在 redux-observable 中使用“of”
- python - OpenAI健身房cartpole-v0理解观察和动作关系
- r - 映射矩阵 R
- android - 为什么会出现此错误:在调用超类型构造函数之前无法引用“ViewHolder.itemView”
- android - 如何在 Android Studio 中对裁剪图像进行实时图像处理
- android - 无法修改 HERE Maps 重新路由路线选项
- android - Android - 如何在 RecyclerView 中更新自定义列表项单个组件?
- c++ - 如果我不关闭 ifstream 会导致内存泄漏吗?
- preg-match - 我想使用 preg_match() 函数添加阿拉伯字符