Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 筛选数组并基于另一个数组对数组重新排序_Javascript - Fatal编程技术网

Javascript 筛选数组并基于另一个数组对数组重新排序

Javascript 筛选数组并基于另一个数组对数组重新排序,javascript,Javascript,因此,我有一个userAccessArray数组,其中每个用户都拥有基于该数组的所有东西可以访问的内容。我正在使用predefinedArrayList检查应用程序的所有对象,并创建一个新的对象数组。[过滤它] 之后,我将根据另一个数组重新排列顺序。这是我的最终结果 下面是代码,它的工作,但我认为应该有一些更好的方式 let predefinedList=[{name:“主页”,路径:“/Home”},{name:“关于页面”,路径:“/About”},{name:“编辑页面”,路径:“/Ed

因此,我有一个
userAccessArray
数组,其中每个用户都拥有基于该数组的所有东西可以访问的内容。我正在使用
predefinedArrayList
检查应用程序的所有对象,并创建一个新的对象数组。[过滤它]

之后,我将根据另一个数组重新排列顺序。这是我的最终结果

下面是代码,它的工作,但我认为应该有一些更好的方式

let predefinedList=[{name:“主页”,路径:“/Home”},{name:“关于页面”,路径:“/About”},{name:“编辑页面”,路径:“/Edit”},{name:“管理页面”,路径:“/Admin”}]
让userAccessArray=[“编辑”、“关于”、“主页”]
让userAccessList=userAccessArray.map(userAccess=>{
if(userAccess==“aboutUs”){
返回预定义列表[1]
}else if(userAccess==“编辑”){
返回预定义列表[2]
}else if(userAccess==“home”){
返回预定义列表[0]
}else if(userAccess==“adminAccess”){
返回预定义列表[3]
}
})
const orderOfTabs=[“主页”、“编辑页”、“关于页”、“管理页”]
const finalTabsArray=orderOfTabs.map(orderOfTab=>userAccessList.find(userAccess=>userAccess.name==orderOfTab)).filter(item=>item)

console.log(“finalTabsArray”,finalTabsArray)
您可以使用
.filter
方法生成
userAccessList
数组,而不是使用
if..elseif
梯形图。请参阅下面的代码

让预定义列表=[{
名称:“主页”,
路径:“/home”
}, {
名称:“关于页面”,
路径:“/about”
}, {
名称:“编辑页面”,
路径:“/edit”
}, {
名称:“管理页面”,
路径:“/admin”
}]
让userAccessArray=[“编辑”、“关于”、“主页”]
让userAccessList=predefinedList.filter(项=>
userAccessArray.indexOf(item.path.substr(1))>-1)
const orderOfTabs=[“主页”、“编辑页”、“关于页”、“管理页”]
const finalTabsArray=orderOfTabs.map(orderOfTab=>userAccessList.find(userAccess=>userAccess.name==orderOfTab)).filter(item=>item)

console.log(“finalTabsArray”,finalTabsArray)
如何更改预定义列表,然后轻松访问:

让预定义列表={
“主页”:{名称:“主页”,路径:“/home”},
“aboutUs”:{名称:“关于页面”,路径:“/About”},
“编辑”:{name:“编辑页面”,路径:“/Edit”},
“管理员”:{name:“管理员页面”,路径:“/admin”}
}
让userAccessArray=[“编辑”、“关于”、“主页”];
让userAccessList=userAccessArray.map(item=>predefinedList[item]);

log(userAccessList)
我建议使用
access
属性来过滤
预定义列表
,并使用对象对未知
名称
属性的默认值的项目进行排序。在这种情况下,这些项目通过取一个巨大的值
无穷大
在列表末尾排序

const
orderOfTabs={“主页”:1,“编辑页面”:2,“关于页面”:3,“管理页面”:4,默认值:无穷大},
预定义列表=[{name:“主页”,路径:“/Home”,访问:“主页”},{name:“关于页面”,路径:“/About”,访问:“关于”},{name:“编辑页面”,路径:“/Edit”,访问:“编辑”},{name:“管理页面”,路径:“/Admin”,访问:“adminAccess”},
userAccessArray=[“编辑”、“关于”、“主页”],
FinalAbsArray=预定义列表
.filter(({access})=>userAccessArray.includes(访问))
.sort(({name:a},{name:b})=>
(orderOfTabs[a]| | orderOfTabs.default)-(orderOfTabs[b]| | orderOfTabs.default));
console.log(finalTabsArray)

作为控制台包装{max height:100%!important;top:0;}
我认为您应该在predef list
中引入id属性,让predefinedList=[{name:“Home”,path:“/Home”,id:'Home'}…
以及基于id的orderofTabs和userAccessArray。这将使过滤变得容易。
让userAccessList=predefinedList.filter(route=>userAccessArray.indexOf(route.id)!==-1)
okay cool!如果不是这样的话,还可以为Orderingofta做更多的事情,因为我有帖子的更新,而且我无法向预定义的列表添加属性谢谢vivek:)对于orderOfTabs,我可以减少FinalTabArray吗?但是我更新了帖子,你可以检查帖子吗关于
orderOfTabs
,没有多少优化可以做。你可以做的最好的事情是确保
predefinedList
按照你想要的顺序来。好的,我已经更新了问题。你可以检查userAccessArray吗你能更新你的答案吗?我已经更新了问题。你能检查userAccessArray吗?如果else条件在问题中有变化,你能更新答案吗
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)