如何检查对象数组是否包含另一个对象数组JS的所有ID

问题描述

我有2个对象数组;

// First one :
[0: {id: 1},1: {id: 2},2: {id: 3},3: {id: 4}]

// Second one :
[0: {id: 10},1: {id: 1},2: {id: 4},3: {id: 76},4: {id: 2},5: {id: 47},6: {id: 3}]

我想测试第二个是否至少具有与第一个相同的ID。在这种情况下,这是正确的,因为第二个包含1、2、3和4个ID。

我尝试使用some()和every(),但是无法正常工作

我的尝试:

let res = this.trainingEpisodesList.some( episode => {
    this.completedEpisodes.every( userEpisode => {
         userEpisode.id == episode.id;
     })
});

谢谢;)

解决方法

ES7

let result = one.map(a => a.id);
let result2 = two.map(a => a.id);
const final_result = result.every(val => result2.includes(val));

ES5

var result = one.map(a => a.id);
var result2 = two.map(a => a.id);

var final_result = result.every(function(val) {

  return result2.indexOf(val) >= 0;

});
,

您可以使用everyfind进行此操作:

let completedEpisodes = 
[
{id: 1},{id: 2},{id: 3},{id: 4}
]

let trainingEpisodesList = 
[
{id: 10},{id: 1},{id: 4},{id: 76},{id: 47},{id: 3}
]

let containsAllCompleted = trainingEpisodesList.every(c => completedEpisodes.find(e=>e.id==c.id));

console.log(containsAllCompleted);