比较两个数组中对象属性的最有效方法

时间:2017-11-17 16:26:07

标签: arrays angular object for-loop

我需要检查Angular2,如果一个数组中的一个对象的属性在另一个数组中是相同的并返回值。有没有更有效的方法来实现它或者类似于Swift中的.contains

doSomething(){
    for (let element1 of array1) {
        for (let element2 of array2) {
            if (element1.id == element2.id) {
                return Observable.fromPromise(element2);
            }
        }
    }
}

编辑:

我必须订阅此值,因为我正在从数据库加载值(在fromPromise中):

this.doSomething().subscribe(id => {
...
}

4 个答案:

答案 0 :(得分:2)

处理数组时,使用高阶方法通常更具可读性;
在你的情况下,你可以filter使用some通过内部数组返回外部数组,然后map它:

array2.filter( x =>
  array1.some( z => z.id == x.id )
).map(x => Observable.fromPromise(x) )

答案 1 :(得分:0)

===用于比较id

的值
   for (const element1 of array1) {
      for (const element2 of array2) {
        if (element1.id === element2.id) {
          return Observable.fromPromise(element2);
        }
      }
    }

如果您想知道两者中是否存在属性调用ID

for (const element1 of array1) {
 Object.keys(element1).forEach(key => {
      if(key === 'id') {
          for (const element2 of array2) {
            if (element2.hasOwnProperty(key)) {
              return Observable.fromPromise(element2);
            }
          }
        }
      }
   }

答案 2 :(得分:0)

array1array2的交集: array1.filter((item) => array2.includes(item));

答案 3 :(得分:-1)

这是一个例子

array1 = [1,2,4,5,6]
array2 = [3,4,2,6]
array1.filter(a1=> array2.includes(a1)) //To print matching results
array1.filter(a1=> array2.includes(a1)).length == array1.length ? true:false //to validate similarity