【问题标题】:How to check if object exists inside array of object in Angular如何检查对象是否存在于Angular中的对象数组中
【发布时间】:2019-11-16 02:15:01
【问题描述】:

我正在使用 Angular 8。我想在 Angular 中检查对象是否存在于对象数组中。 我的对象是:

let objVenIns = {
                'CntNumber': 4,
                'CntMixer': 2,
                'DevicePositions': 'NA',
                'AddComments': 'NA',                
            }

对象数组也包含其他列:-

let arrRowData = [0: {'SrNo' : 1, 'Name' : 'ABC', 'CntNumber': 1,'CntMixer': 3,'DevicePositions': 'Right','AddComments': 'NA'},
    1: {'SrNo' : 2, 'Name' : 'DEF', 'CntNumber': 4,'CntMixer': 2,'DevicePositions': 'NA','AddComments': 'NA'},
    2: {'SrNo' : 3, 'Name' : 'XYZ', 'CntNumber': 2,'CntMixer': 5,'DevicePositions': 'Left','AddComments': 'NA'}]

在 Angular JS 中,我曾经执行以下函数来检查对象是否存在于数组中:-

var data = $filter('filter')($scope.arrRowData, objVenIns, true)[0];

如何在 Angular 8 中实现这样的对象搜索?

【问题讨论】:

    标签: arrays angular angular-filters


    【解决方案1】:

    如果你想获取所有存在的对象,那么你可以过滤它:

    let objVenIns = {
    'CntNumber': 4,
    'CntMixer': 2,
    'DevicePositions': 'NA',
    'AddComments': 'NA',
    };
    
    
    let arrRowData = [
    {'SrNo' : 1, 'Name' : 'ABC', 'CntNumber': 1,'CntMixer': 3,'DevicePositions': 'Right','AddComments': 'NA'},
    {'SrNo' : 2, 'Name' : 'DEF', 'CntNumber': 4,'CntMixer': 2,'DevicePositions': 'NA','AddComments': 'NA'},
    {'SrNo' : 3, 'Name' : 'XYZ', 'CntNumber': 2,'CntMixer': 5,'DevicePositions': 'Left','AddComments': 'NA'}
    ];
    
    const result = arrRowData.filter(f=>
    f.CntMixer === objVenIns.CntMixer &&
      f.CntNumber === objVenIns.CntNumber &&
      f.DevicePositions === objVenIns.DevicePositions &&
      f.DevicePositions === objVenIns.DevicePositions &&
      f.AddComments === objVenIns.AddComments
    );
    
    console.log(result);
    console.log(result.length > 0 ? 'exists' : 'no');

    【讨论】:

      【解决方案2】:

      您也可以在 Angular 中使用相同的 array.FindArray.Filter

      let arrRowData = [{'SrNo' : 1, 'Name' : 'ABC', 'CntNumber': 1,'CntMixer': 3,'DevicePositions': 'Right','AddComments': 'NA'},
          {'SrNo' : 2, 'Name' : 'DEF', 'CntNumber': 4,'CntMixer': 2,'DevicePositions': 'NA','AddComments': 'NA'},
          {'SrNo' : 3, 'Name' : 'XYZ', 'CntNumber': 2,'CntMixer': 5,'DevicePositions': 'Left','AddComments': 'NA'}];
      
      let objVenIns = {
                      'CntNumber': 4,
                      'CntMixer': 2,
                      'DevicePositions': 'NA',
                      'AddComments': 'NA',                
                  };
                  
      //if you want to check whole object
      var isInArray = arrRowData.indexOf(objVenIns) !== -1;
      console.log(isInArray);
      
      //if you want to check by prop values
      
      var isInArray1 = arrRowData.find(function(el){ return el.CntNumber === 4 && el.CntMixer ==2 }) !== undefined;
      console.log(isInArray1);

      【讨论】:

      • 我已经编辑了我的帖子并更改了数组结构。我最初没有发帖是我的错。我正在寻找检查整个对象的方法。你能帮帮忙吗?
      【解决方案3】:

      您可以使用此链接StackBlitz Link 识别对象包含数组或对象 在这里,您可以使用 Array.isArray() 以自定义方式进行操作。

      • 数组结构是..

        arrRowData = [
            {'SrNo' : 1, 'Name' : 'ABC', 'CntNumber': 1,'CntMixer': 3,'DevicePositions': 'Right','AddComments': 'NA'},
            {'SrNo' : 2, 'Name' : 'DEF', 'CntNumber': 4,'CntMixer': 2,'DevicePositions': 'NA','AddComments': 'NA'},
            {'SrNo' : 3, 'Name' : 'XYZ', 'CntNumber': 2,'CntMixer': 5,'DevicePositions': 'Left','AddComments': 'NA'},
            [{'SrNo':4}]
         ]
        
      • 您检查天气数组的方法包含对象或数组

        isObject(values){
           if (!Array.isArray (values) ){ return true;}
           else{ return false; }
        }
        
      • 您的模板 HTML 是

        <div *ngFor= "let section of arrRowData ">
              <ul>
                   <li *ngIf="isObject(section); else printVal">
                        <span> This is Object {{section |json}} </span>
                   </li>
              </ul>
              <ng-template #printVal>
                    <li>  This is Array {{section | json}} </li>
              </ng-template>  
        </div>
        

      【讨论】:

        【解决方案4】:

        如果你只想检查object是否存在,你可以使用Array#some

        const arrRowData = [
          {
            SrNo: 1,
            Name: 'ABC',
            CntNumber: 1,
            CntMixer: 3,
            DevicePositions: 'Right',
            AddComments: 'NA'
          },
          {
            SrNo: 2,
            Name: 'DEF',
            CntNumber: 4,
            CntMixer: 2,
            DevicePositions: 'NA',
            AddComments: 'NA'
          },
          {
            SrNo: 3,
            Name: 'XYZ',
            CntNumber: 2,
            CntMixer: 5,
            DevicePositions: 'Left',
            AddComments: 'NA'
          }
        ];
        const objVenIns = {
          CntNumber: 4,
          CntMixer: 2,
          DevicePositions: 'NA',
          AddComments: 'NA'
        };
        
        const areObjectEquals = (obj1, obj2) =>
          obj1.CntMixer === obj2.CntMixer &&
          obj1.CntNumber === obj2.CntNumber &&
          obj1.DevicePositions === obj2.DevicePositions &&
          obj1.DevicePositions === obj2.DevicePositions &&
          obj1.AddComments === obj2.AddComments;
        
        const objectExistsInArray = arrRowData.some(row => areObjectEquals(row, objVenIns));
        
        console.log('objectExistsInArray?', objectExistsInArray);

        PS1:我强烈建议您创建一个界面来输入您的arrayobjectmethods

        PS2:对于更动态的方法,您无需告知要检查哪些属性,也无需关心其属性是否发生变化,我建议您查看this answer

        【讨论】:

          【解决方案5】:

          你也可以像这样使用Array.Propotype.reduce()

          const filter = arrRowData.reduce((a, e, i) => {
              if (
                e.CntMixer === objVenIns.CntMixer &&
                e.CntNumber === objVenIns.CntNumber &&
                e.DevicePositions === objVenIns.DevicePositions &&
                e.DevicePositions === objVenIns.DevicePositions &&
                e.AddComments === objVenIns.AddComments
              )
                a.push(e); return a;
          }, []);  
          
          console.log(filter)
          

          【讨论】:

            猜你喜欢
            • 2020-11-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-08-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多