首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为了得到未定义的内部

为了得到未定义的内部
EN

Stack Overflow用户
提问于 2017-09-22 06:43:29
回答 2查看 52关注 0票数 2

我有这个JSON数据:

代码语言:javascript
复制
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"
    }]

而这个:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

知道我怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-22 06:45:28

问题是,如果listId小于lists.length,则得到未定义的arr.length

您需要为它们自己的数组使用各自的索引,即i用于arrj用于lists

代码语言:javascript
复制
if( (arr[i].listId == lists[j].listId) && (arr[i].permission == lists[j].permission) )
票数 5
EN

Stack Overflow用户

发布于 2017-09-22 06:53:09

您可以通过查找权限表稍微更改一下结构,并且只对结果集使用一个循环。

代码语言:javascript
复制
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);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46358400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档