我有这个JSON数据:
var lists = [{
"listId": 1,
"permission": "WRITE"
}, {
"listId": 2,
"permission": "WRITE"
}, {
"listId": 2,
"permission": "READ"
}, {
"listId": 3,
"permission": "READ"
}, {
"listId": 3,
"permission": "WRITE"
}, {
"listId": 5,
"permission": "WRITE"
}]而这个:
var arr = [{
"listId": 1,
"confidentiality": "PUBLIC",
"listName": "List name here..1",
"permission": "WRITE"
}, {
"listId": 2,
"confidentiality": "PUBLIC",
"listName": "List name here..2",
"permission": "READ"
}, {
"listId": 3,
"confidentiality": "CONFIDENTIAL",
"listName": "List name here..3",
"permission": "WRITE"
}, {
"listId": 4,
"confidentiality": "CONFIDENTIAL",
"listName": "List name here..4",
"permission": "WRITE"
}, {
"listId": 5,
"confidentiality": "CONFIDENTIAL",
"listName": "List name here..5",
"permission": "WRITE"
}]使用这个for和nested,我必须过滤来自arr的数据,并将其推送到results[],如果在列表中匹配listId和权限.E 211
var result = [];
for(var i = 0; i < arr.length; i++) {
for(var j = 0; j < lists.length; j++) {
if( (arr[j].listId == lists[i].listId) && (arr[j].permission == lists[i].permission) ) {
result.push(arr[j]);
}
}
}
console.log(result);问题是,如果listId小于lists.length,则得到未定义的arr.length
知道我怎么解决这个问题吗?
发布于 2017-09-22 06:45:28
问题是,如果listId小于lists.length,则得到未定义的arr.length
您需要为它们自己的数组使用各自的索引,即i用于arr,j用于lists
if( (arr[i].listId == lists[j].listId) && (arr[i].permission == lists[j].permission) )发布于 2017-09-22 06:53:09
您可以通过查找权限表稍微更改一下结构,并且只对结果集使用一个循环。
var lists = [{ listId: 1, permission: "WRITE" }, { listId: 2, permission: "WRITE" }, { listId: 2, permission: "READ" }, { listId: 3, permission: "READ" }, { listId: 3, permission: "WRITE" }, { listId: 5, permission: "WRITE" }],
array = [{ listId: 1, confidentiality: "PUBLIC", listName: "List name here..1", permission: "WRITE" }, { listId: 2, confidentiality: "PUBLIC", listName: "List name here..2", permission: "READ" }, { listId: 3, confidentiality: "CONFIDENTIAL", listName: "List name here..3", permission: "WRITE" }, { listId: 4, confidentiality: "CONFIDENTIAL", listName: "List name here..4", permission: "WRITE" }, { listId: 5, confidentiality: "CONFIDENTIAL", listName: "List name here..5", permission: "WRITE" }],
permissions = {},
result;
lists.forEach(function (p) {
permissions[p.listId] = permissions[p.listId] || {};
permissions[p.listId][p.permission] = true;
});
result = array.filter(function (a) {
return permissions[a.listId] && permissions[a.listId][a.permission];
});
console.log(result);.as-console-wrapper { max-height: 100% !important; top: 0; }
https://stackoverflow.com/questions/46358400
复制相似问题