我正在尝试返回匹配授权的所有元素===管理员或授权===访问者没有成功
hier ist what we sofd。 Jsfiddle
var otherStuff = {};
courses = [
{ index: ['', 'overview'], moduleId: 'overview', title: 'overview', nav: 1 , authorize: ["sellers", "taxi"]},
{ index: 'rating', moduleId: 'rating', title: 'rating', nav: 3},
{ index: 'example', moduleId: 'example', title: 'example', nav: 5, authorize: ["Visitor", "Administrator"] },
{ index: 'apple', moduleId: 'apple', title: 'apple', nav: 6, authorize: ["User", "Administrator"] },
]
var resultSet = $.grep(courses, function (element, index) {
// return all element with authorize === Administrator or authorize === Visitor;
});
console.log(JSON.stringify(resultSet))
任何人都可以帮助我吗?
答案 0 :(得分:1)
使用$.inArray()检查数组中是否存在该值。由于Array.indexOf()
,未使用IE compatabilityvar resultSet = $.grep(courses, function (element, index) {
return $.inArray('Administrator', element.authorize) != -1
});
演示:Fiddle
但是既然你使用的是jQuery 2+,我认为你并不担心ID< 9然后
var resultSet = $.grep(courses, function (element, index) {
return element.authorize && element.authorize.indexOf('Administrator') != -1
});
演示:Fiddle
答案 1 :(得分:1)
我的两个解决方案都可以防止任何变量泄漏到您的闭包中并且不需要库。自执行功能是您可以用任何类型的授权替换文字数组[“管理员”,“访客”]。
ECMA 5也是函数式编程的一个很好的例子。接受的答案不起作用,因为它缺乏针对多个authtypes进行测试的能力。
JSFIDDLE:http://jsfiddle.net/FcFDG/3/
var acceptedTypes = ["Administrator", "Visitor"];
// ECMA 5
var resultSetA = (function(authTypes){
return courses.filter(function(crs){
return crs && crs.authorize
&& crs.authorize.indexOf && authTypes.some(function(authType){
return ~crs.authorize.indexOf(authType);
});
});
})(acceptedTypes);
console.log(JSON.stringify(resultSetA));
//Compatibility with all browsers (ECMAScript 3):
var resultSetB = (function(authTypes){
var results = [], i, j, k, works;
for(i=0; i<courses.length; i++){
if(courses[i]&&courses[i].authorize&&courses[i].authorize.length){
works = false;
for(j=0; j<courses[i].authorize.length; j++){
for(k=0; k<authTypes.length; k++){
works = works || courses[i].authorize[j] === authTypes[k];
}
}
if(works)
results.push(courses[i]);
}
}
return results;
})(acceptedTypes);
console.log(JSON.stringify(resultSetB));