Javascript 获取唯一和重复的值

Javascript 获取唯一和重复的值,javascript,angularjs,json,for-loop,filter,Javascript,Angularjs,Json,For Loop,Filter,我有以下JSON数据: vm.userListData = [{ "listId": 1, "permission": "READ" }, { "listId": 2, "permission": "WRITE" }, { "listId": 2, "permission": "READ" }, { "listId": 3, "permissio

我有以下JSON数据:

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"
}]
有了这两个JSON数据,我必须过滤并获得唯一的值,并将它们放入数组中,而重复的值(listId和permission)则将它们放入另一个数组中。 我这样做:

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.listformrid=[];
vm.listForDropDown=[];
(功能(){
对于(var i=0;i
vm.listForGrid
正常,但是
vm.listForDropDown
值不止一次是相同的值,我必须
中断
循环

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


谢谢大家!

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

var vm={},
权限={};
vm.userListData=[{“listId”:1,“权限”:“读取”},{“listId”:2,“权限”:“读取”},{“listId”:2,“权限”:“读取”},{“listId”:3,“权限”:“写入”},{“listId”:4,“权限”:“写入”},{“listId”:5,“权限”:“写入”};
vm.userComplementaryList=[{“listId”:1,“机密性”:“PUBLIC”,“listName”:“List name here..1”,“权限”:“WRITE”},{“listId”:2,“机密性”:“PUBLIC”,“listName”:“List name here..2”,“权限”:“READ”},{“listId”:3,“机密性”,“listName”:“List name here..3”,“权限”:“WRITE”},{“listId”:4,“机密性”:“机密性”,“列表名”:“此处列表名..4”,“权限”:“写入”},{“列表ID”:5,“机密性”:“机密性”,“列表名”:“此处列表名..5”,“权限”:“读取”}];
vm.listForDropDown=[];
vm.userListData.forEach(函数(p){
权限[p.listId]=权限[p.listId]| |{};
权限[p.listId][p.permission]=true;
});
vm.listformrid=vm.userComplementaryList.filter(函数(a){
if(权限[a.listId]&&permissions[a.listId][a.permission]){
返回true;
}
vm.listForDropDown.push(a);
});
console.log(vm.listformrid);
console.log(vm.listForDropDown)

.as console wrapper{max height:100%!important;top:0;}
如果授予了权限,您仍然可以使用哈希表作为引用。然后,您只需要一个没有嵌套循环的单循环来对项目进行排序

var vm={},
权限={};
vm.userListData=[{“listId”:1,“权限”:“读取”},{“listId”:2,“权限”:“读取”},{“listId”:2,“权限”:“读取”},{“listId”:3,“权限”:“写入”},{“listId”:4,“权限”:“写入”},{“listId”:5,“权限”:“写入”};
vm.userComplementaryList=[{“listId”:1,“机密性”:“PUBLIC”,“listName”:“List name here..1”,“权限”:“WRITE”},{“listId”:2,“机密性”:“PUBLIC”,“listName”:“List name here..2”,“权限”:“READ”},{“listId”:3,“机密性”,“listName”:“List name here..3”,“权限”:“WRITE”},{“listId”:4,“机密性”:“机密性”,“列表名”:“此处列表名..4”,“权限”:“写入”},{“列表ID”:5,“机密性”:“机密性”,“列表名”:“此处列表名..5”,“权限”:“读取”}];
vm.listForDropDown=[];
vm.userListData.forEach(函数(p){
权限[p.listId]=权限[p.listId]| |{};
权限[p.listId][p.permission]=true;
});
vm.listformrid=vm.userComplementaryList.filter(函数(a){
if(权限[a.listId]&&permissions[a.listId][a.permission]){
返回true;
}
vm.listForDropDown.push(a);
});
console.log(vm.listformrid);
console.log(vm.listForDropDown)
.as控制台包装{max height:100%!important;top:0;}
我解决了这个问题:

(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]);
        }
    }
})();
(函数(){
对于(var i=0;i
我解决了这个问题:

(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]);
        }
    }
})();
(函数(){
对于(var i=0;i
这是一个使用array.some的分拣机版本

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);
})

这是一个使用array.some的分拣机版本

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);
})

break
当您发现listid相同时。将代码放入plunkr
break
当您发现listid相同时。将代码放入plunkr您仍然需要一个嵌套循环来查找相同的元素。您仍然需要一个嵌套循环来查找相同的元素。