【问题标题】:Filter elements of array if contained in other过滤数组的元素(如果包含在其他元素中)
【发布时间】:2018-05-17 22:58:45
【问题描述】:

我有两个如下格式的数组,

this.originalArray = [{
    id: 10,
    name: 'a',
    roleInfo: [{
        roleID: 5,
        roleName: 'USER'
    }]
},
{
    id: 20,
    name: 'b',
    roleInfo: [{
        roleID: 5,
        roleName: 'Admin',
    }]
 },
 {
     id: 30,
     name: 'c',
     roleInfo: [{
         roleID: 5,
         roleName: 'Support',
     }]
 }]

this.removeElements =      
    roleInfo: [{
        roleID: 5,
        roleName: 'Support',        
}]  

问题:如何过滤 removeElements 数组中不存在的 originalArray

【问题讨论】:

标签: arrays angular typescript


【解决方案1】:

你可以的

var reuslt =  originalArray.filter(item => removeElements.find(test => test.id == item.id));

【讨论】:

    【解决方案2】:

    试试这个:

    originalArray.filter(item => removeElements.some(f => f.id == item.id));
    

    【讨论】:

      【解决方案3】:

      这适用于(几乎)所有浏览器。

      var a = [1, 2, 3, 4, 5];
      var b = [2, 3];
      
      var result = [], found;
      for (var i = 0; i < a.length; i++) {
          found = false;
          // find a[i] in b
          for (var j = 0; j < b.length; j++) {
              if (a[i] == b[j]) {
                  found = true;
                  break;
              }
          }
          if (!found) {
              result.push(a[i]);
          }
      }
      

      或者如果兼容性不是问题

      a.filter(i => b.some(j => j.id === i.id));

      【讨论】:

        【解决方案4】:
        this.originalArray =[ { id: 10, name: 'a', roleInfo: [{ roleID: 5, roleName: 'USER' }] },
          { id: 20, name: 'b', roleInfo: [{ roleID: 5, roleName: 'Admin', }] },
           { id: 30, name: 'c', roleInfo: [{ roleID: 5, roleName: 'Support', }] }, ]
        
           this.removeElements =[
            {
                id: 30,
                name: 'c',
                roleInfo: [{
                    roleID: 5,
                    roleName: 'Support',
                }]
            }]  
        
            var finalArr = [];
           this.originalArray.forEach(function(d){
           var filterArr =  this.removeElements.filter(function(d1){
              if(d1.id == d.id && d1.name == d.name){
                return d1;
              }
            });
            if(filterArr.length == 0){
              finalArr.push(d);
            }
           })
        

        【讨论】:

          猜你喜欢
          • 2021-07-19
          • 2015-01-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-27
          • 1970-01-01
          相关资源
          最近更新 更多