因此,我有一个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)
答案 0 :(得分:1)
我建议使用access
属性来过滤predefinedList
,并使用一个对象对具有未知值name
的默认值的项目进行排序。在这种情况下,这些项目通过使用巨大的值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; }
答案 1 :(得分:0)
您可以使用if..elseif
方法来生成.filter
数组,而不是使用userAccessList
梯形图。请参见下面的代码。
let predefinedList = [{
name: "Home Page",
path: "/home"
}, {
name: "About Page",
path: "/about"
}, {
name: "Edit Page",
path: "/edit"
}, {
name: "Admin Page",
path: "/admin"
}]
let userAccessArray = ["edit", "about", "home"]
let userAccessList = predefinedList.filter(item =>
userAccessArray.indexOf(item.path.substr(1)) > -1)
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)
答案 2 :(得分:0)
如何更改预定义列表,然后轻松访问:
let predefinedList = {
"home": {name: "Home Page", path:"/home"},
"aboutUs": {name: "About Page", path:"/about"},
"editing": {name: "Edit Page", path:"/edit"},
"admin": {name: "Admin Page", path:"/admin"}
}
let userAccessArray = ["editing", "aboutUs", "home"];
let userAccessList = userAccessArray.map(item => predefinedList[item]);
console.log(userAccessList);
编辑:根据您对代码的更改来更改代码。至于orderOfTabs,这并不能真正优化。
答案 3 :(得分:0)
let predefinedList = [{name: "Home Page", path:"/home"},{name: "About Page", path:"/about"}, {name: "Edit Page", path:"/edit"}, {name: "Admin Page", path:"/admin"} ]
const orderOfTabs = ["Home Page", "Edit Page", "About Page", "Admin Page"];
let userAccessArray = ["admin", "edit", "about", "home"]
function getUserActionList(type) {
switch(type) {
case 'about':
return predefinedList[1];
case 'home':
return predefinedList[0];
case 'edit':
return predefinedList[2];
case 'admin':
return predefinedList[3];
}
}
let userAccessList = userAccessArray.map(userAccess => getUserActionList(userAccess));
userAccessList.sort( function (a, b) {
var prevV = a['name'], nextV = b['name'];
return (orderOfTabs.indexOf(prevV) > orderOfTabs.indexOf(nextV)) ? 1 : -1;
});
console.log(userAccessList)