首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获得唯一和重复的值

获得唯一和重复的值
EN

Stack Overflow用户
提问于 2017-09-22 09:30:55
回答 3查看 59关注 0票数 0

我有这个JSON数据:

代码语言:javascript
复制
vm.userListData = [{
        "listId": 1,
        "permission": "READ"
    }, {
        "listId": 2,
        "permission": "WRITE"
    }, {
        "listId": 2,
        "permission": "READ"
    }, {
        "listId": 3,
        "permission": "READ"
    }, {
        "listId": 3,
        "permission": "WRITE"
    }, {
        "listId": 4,
        "permission": "WRITE"
    }, {
        "listId": 5,
        "permission": "WRITE"
    }]

而这个:

代码语言:javascript
复制
vm.userComplementaryList = [{
    "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": "READ"
}]

对于这两个JSON数据,我必须筛选并获取唯一的值,并将它们推入数组和复制的值中(listId和权限),将它们推入其他数组中。我做了这个:

代码语言:javascript
复制
vm.listForGrid = [];
vm.listForDropDown = [];

(function(){
    for(var i = 0; i < vm.userComplementaryList.length; i++) { 
        for(var j = 0; j < vm.userListData.length; j++) {   
            if( (vm.userComplementaryList[i].listId == vm.userListData[j].listId) && (vm.userComplementaryList[i].permission == vm.userListData[j].permission) ) {
                vm.listForGrid.push(vm.userComplementaryList[i]);
            }
            else {
                vm.listForDropDown.push(vm.userComplementaryList[i]);
            }
        }
    }
})();

vm.listForGrid是正常的,但是vm.listForDropDown值不止一次是相同的值,所以我必须使用break循环。

重复的值与listId和权限在两个数组中的值是相同的

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-22 10:24:15

这是一个使用array.some的分类器版本

代码语言:javascript
复制
vm.userComplementaryList.forEach(function(vCom) {
    vm.userListData.some(function(vUser) {
        return (vCom.listId == vUser.listId && vCom.permission == vUser.permission);
    }) ? vm.listForGrid.push(vCom) : vm.listForDropDown.push(vCom);
})
票数 2
EN

Stack Overflow用户

发布于 2017-09-22 09:40:42

如果授予权限,您可以使用hash表作为引用。然后,只需要一个没有嵌套循环的循环就可以对项进行排序。

代码语言:javascript
复制
var vm = {},
    permissions = {};

vm.userListData = [{ "listId": 1, "permission": "READ" }, { "listId": 2, "permission": "WRITE" }, { "listId": 2, "permission": "READ" }, { "listId": 3, "permission": "READ" }, { "listId": 3, "permission": "WRITE" }, { "listId": 4, "permission": "WRITE" }, { "listId": 5, "permission": "WRITE" }];
vm.userComplementaryList = [{ "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": "READ" }];

vm.listForDropDown = [];

vm.userListData.forEach(function (p) {
    permissions[p.listId] = permissions[p.listId] || {};
    permissions[p.listId][p.permission] = true;
});

vm.listForGrid = vm.userComplementaryList.filter(function (a) {
    if (permissions[a.listId] && permissions[a.listId][a.permission]) {
        return true;
    }
    vm.listForDropDown.push(a);
});

console.log(vm.listForGrid);
console.log(vm.listForDropDown);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 3
EN

Stack Overflow用户

发布于 2017-09-22 09:57:59

我解决了这个问题:

代码语言:javascript
复制
(function(){
    for(var i = 0; i < vm.userComplementaryList.length; i++) { 
        var found = false;
        for(var j = 0; j < vm.userListData.length; j++) {   
            if( (vm.userComplementaryList[i].listId == vm.userListData[j].listId) && (vm.userComplementaryList[i].permission == vm.userListData[j].permission) ) {
                found = true;
                break;
            }
        }
        if(found) {
            vm.listForGrid.push(vm.userComplementaryList[i]);
        }
        else {
            vm.listForDropDown.push(vm.userComplementaryList[i]);
        }
    }
})();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46361374

复制
相关文章

相似问题

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