2017-09-22 12 views
0

値複製:ユニークな取得し、私は、この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" 
    }] 

をそして、この1:私はフィルタリングして一意の値を取得し、配列にそれらをプッシュする必要があり、この2つのJSONデータを

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" 
}] 

と重複する値(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.listForGridはOKですが、vm.listForDropDown値が同じ値で一度、私がしなければならないbreakループ、より多くのものがあります。 私はこれをし。

重複値は

ありがとう両方の配列にlistIdと許可を得て、同じ値です!

+0

'break'を使用してソーターバージョンです。 –

+0

コードをplunkrに置く –

答えて

2

を、これはあなたが同じlistid見つけたとき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); 
}) 
3

許可が与えられていれば、まだ参照としてハッシュテーブルを使用できます。次に、アイテムをソートするためにネストされたループなしでただ1つのループが必要です。

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);
.as-console-wrapper { max-height: 100% !important; top: 0; }

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]); 
     } 
    } 
})(); 
+0

同じ要素を見つけるためにネストループが必要です。 –

関連する問題