Javascript 如何检查数组中的id是否出现在另一个数组中,然后将其推送到新数组中

Javascript 如何检查数组中的id是否出现在另一个数组中,然后将其推送到新数组中,javascript,arrays,angular,typescript,rxjs,Javascript,Arrays,Angular,Typescript,Rxjs,我有两个数组要比较。如果两个数组中都出现了一个特定的id,那么应该将该相关对象推送到一个新数组中 下面是我的代码的当前状态 locations: Location[]; allImages: Images[]; specificImages: Images[] locations.forEach((location) => { allImages.forEach((img) => { if(location.id === img.id) { // Here I want

我有两个数组要比较。如果两个数组中都出现了一个特定的id,那么应该将该相关对象推送到一个新数组中

下面是我的代码的当前状态

locations: Location[];
allImages: Images[];
specificImages: Images[]

locations.forEach((location) => {
  allImages.forEach((img) => {
    if(location.id === img.id) { // Here I want to check if a specific id occurs in both arrays
      specificImages.push(img);
    }
  });
})

我目前正在使用Angular,如果station/query是在RxJS的CombineTest操作符中进行的话。如果有一个很好的Typescript甚至RxJS解决方案,那就太好了。

一个简单的方法是使用

some()方法测试数组中是否至少有一个元素 通过所提供函数实现的测试

您可以对此进行推广,以检查具有特定id的对象是否包含在任意数量的数组中,即

const first = [...]
const second = [...]
const third = [...]
const allArrays = [first, second, third]

if (allArrays.every(a => a.some(x => x.id === id)) {
  // do your thing
}
常数优先=[…] 常数优先=[…] 您可以对此进行推广,以检查具有特定id的对象是否包含在任意数量的数组中,即

const first = [...]
const second = [...]
const third = [...]
const allArrays = [first, second, third]

if (allArrays.every(a => a.some(x => x.id === id)) {
  // do your thing
}

一个简单的方法是使用

some()方法测试数组中是否至少有一个元素 通过所提供函数实现的测试

您可以对此进行推广,以检查具有特定id的对象是否包含在任意数量的数组中,即

const first = [...]
const second = [...]
const third = [...]
const allArrays = [first, second, third]

if (allArrays.every(a => a.some(x => x.id === id)) {
  // do your thing
}
常数优先=[…] 常数优先=[…] 您可以对此进行推广,以检查具有特定id的对象是否包含在任意数量的数组中,即

const first = [...]
const second = [...]
const third = [...]
const allArrays = [first, second, third]

if (allArrays.every(a => a.some(x => x.id === id)) {
  // do your thing
}
尝试使用数组的方法,同时删除第一个forEach:

allImages.forEach((img) => {
    if(this.location.some(x => x.id === img.id)) { 
      // it returns true if Id found
      specificImages.push(img);
    }
});
尝试使用数组的方法,同时删除第一个forEach:

allImages.forEach((img) => {
    if(this.location.some(x => x.id === img.id)) { 
      // it returns true if Id found
      specificImages.push(img);
    }
});

您可以使用
filter
方法
var intersect=list1.filter(a=>list2.some(b=>a.userId==b.userId))

list1=[
{id:1,图像:'A'},
{id:2,图像:'B'},
{id:3,图像:'C'},
{id:4,图像:'D'},
{id:5,图像:'E'}
]
清单2=[
{id:1,图像:'A'},
{id:2,图像:'E'},
{id:6,图像:'C'}
]
var intersect=list1.filter(a=>list2.some(b=>a.id==b.id));

console.log(intersect)
您可以使用
filter
方法
var intersect=list1.filter(a=>list2.some(b=>a.userId==b.userId))

list1=[
{id:1,图像:'A'},
{id:2,图像:'B'},
{id:3,图像:'C'},
{id:4,图像:'D'},
{id:5,图像:'E'}
]
清单2=[
{id:1,图像:'A'},
{id:2,图像:'E'},
{id:6,图像:'C'}
]
var intersect=list1.filter(a=>list2.some(b=>a.id==b.id));

console.log(intersect)
如果我删除第一个forEach循环,不知何故它不起作用..如果我删除第一个forEach循环,不知何故它不起作用。。