当前位置: 首页 > 知识库问答 >
问题:

将一个数组与另一个数组进行比较,以确保第二个数组不包含不同的值

张溪叠
2023-03-14

我想将一个阵列与另一个阵列进行比较:

array1 = ['billy', 'bob', 'paul'];
array2 = ['billy', 'michael', 'bob'];

我想检测数组2是否包含数组1中没有的名称。

数组2可以比数组1长或短,换句话说,数组2可能缺少名称或名称比数组1多,但数组2不能具有与数组1不同的名称。

到目前为止,我可以检测出数组2是否比数组1长。如果是,它显然是在添加名称,因此是无效的:

if (array1.length < array2.length) {
      console.log('no');
}

但是如果这不够精确(如果两个数组有相同数量的值,即使单个值不相关,它也返回true)。

请参见以下示例场景:

array1 = ['billy', 'bob', 'paul'];
array2 = ['billy', 'b', 'paul']; //should not be valid

array1 = ['billy', 'b', 'paul'];
array2 = ['billy', 'bob', 'paul']; //should not be valid

array1 = ['billy', 'bob', 'paul'];
array2 = ['billy', 'michael', 'paul']; //should not be valid


array1 = ['billy', 'bob', 'paul'];
array2 = ['billy', 'bob', 'paul', 'michael']; //should not be valid


array1 = ['billy', 'bob', 'paul'];
array2 = ['billy', 'bob']; //this is valid


array1 = ['billy', 'bob', 'paul'];
array2 = ['billy']; //this is valid

array1 = ['bob', 'bob', 'billy', 'paul'];
array2 = ['paul', 'bob', 'bob', 'bob']; //this IS NOT valid

array1 = ['bob', 'bob', 'billy', 'paul'];
array2 = ['paul', 'bob', 'bob']; //this is valid

我假设我应该使用 .every(),但我不确定在比较两个数组时如何实现它,因为我发现一个数组与单个值的测试值的所有示例

更新:数组2不能拥有比数组1更多的特定名称的实例,但可以更少。

共有3个答案

宗政松
2023-03-14

如果你想要一个简单易懂的解决方案,你不需要使用every。只需使用下面的代码。

下面的代码使用<code>。forEach()循环通过array2循环,并使用另一个。forEach()循环查找array2中的值是否也在array1中。

注意:有许多更有效的方法,但如果您不熟悉编程并且想了解如何完成此操作,则此方法更容易理解。

编辑:正如你在评论中建议的,我修改了我的代码,所以< code>array2中的每个值在< code>array1中都只有一个对应的值。并非每次匹配< code>array2和< code>array1中的值时,它都会从< code>array1中删除该值。

var array1 = ['bob', 'bob', 'billy', 'paul'];
var array2 = ['bob', 'bob', 'bob', 'billy'];
var contains = false;
var output = true;

array2.forEach(e2 => {
  contains = false;
  array1.forEach(e1 => {
    if (e2 == e1) {
      contains = true;
      array1.splice(array1.indexOf(e1), 1);
    }
  })
  
  if (!contains) {
    output  = false;
  }
});

console.log(output);
毛勇
2023-03-14

您可以使用每一个来检查array2中的每个对象是否都在array1中:

var array1 = ['billy', 'bob', 'paul'];
var array2 = ['billy', 'michael', 'bob'];

var allFound = array2.every(e => array1
.includes(e));

console.log(allFound); //Should return false because 'michael' is not in array1
澹台权
2023-03-14

此方法使用函数 some 在 array1 中至少有一个名称不在 array1 中并且数组之间的名称总和不同时停止。

let isValid = (arr, arr2) => {
  let sum = (array, n) => array.reduce((a, an) => a + (an === n), 0);  
  return !arr2.some(n => {
    let sum2 = sum(arr2, n);
    return !arr.some(an => an === n && sum(arr, an) === sum2);
  });
};

console.log(isValid(['billy', 'bob', 'paul'], ['billy', 'b', 'paul'])); //should not be valid
console.log(isValid(['billy', 'b', 'paul'], ['billy', 'bob', 'paul'])); //should not be valid
console.log(isValid(['billy', 'bob', 'paul'],['billy', 'michael', 'paul'])); //should not be valid
console.log(isValid(['billy', 'bob', 'paul'], ['billy', 'bob', 'paul', 'michael'])); //should not be valid
console.log(isValid(['billy', 'bob', 'paul'], ['billy', 'bob'])); //this is valid
console.log(isValid(['billy', 'bob', 'paul'], ['billy'])); //this is valid
console.log(isValid(['bob', 'bob', 'billy', 'paul'], ['paul', 'bob', 'bob', 'bob'])); //this is NOT valid
console.log(isValid(['bob', 'bob', 'billy', 'paul'], ['paul', 'bob', 'bob'])); //this is valid
css prettyprint-override">.as-console-wrapper { max-height: 100% !important; top: 0; }
 类似资料:
  • 我使用Nodejs,有一个对象包含一个object数组(API请求的结果)和一个简单的值数组。 它们看起来是这样的: 如何将包含对象数组的对象与简单数组进行比较? 我要找的是,从简单数组中获取ID,并将它们与另一个“复杂”对象进行比较,以检索属性以及简单数组中的相应ID和另一个对象属性,然后将结果存储在一个对象数组中。 简单来说,我希望有这样的结果: 当从API请求中检索“复杂”对象时,我尝试了以

  • 我正在制作一个输血游戏。我有2个数组列表。一个有献血者的血型和姓名,第二个有接受者的血型和姓名。所有的名字我都会得到用户的输入并将它们存储在一个数组中(接受者数组列表更大)。 我不知道如何使用布尔2D数组将两个数组列表进行比较(应该返回true或false)。例如,在所有捐赠者和接受者输入姓名和血型后,程序应该告诉他们是否匹配。 我知道下面的代码是错误的,但我不知道怎么做。

  • 有两个不同的字符串数组。 我想把这两个数组做成一个4*2矩阵。 我怎么做这个矩阵?

  • 问题内容: 如何在不比较键的情况下将一个数组追加到另一个数组? 最后应该是: 如果我使用或,则将导致以下结果之一: 这样做应该是一件值得做的事,但是要用一种更优雅的方式: 问题答案: 是一种优雅的方式: 做类似的事情: 将不起作用,因为运算符实际上并未合并它们。如果它们的键与相同,则不会执行任何操作。

  • 问题内容: 如何有效地检查整数数组中的所有元素是否是Java中另一个数组的所有元素的子集?例如,[33 11 23]是[11 23 33 42]的子集。提前致谢。 问题答案: 从超集数组中取出一个。检查子集中数组的每个元素是否包含在中。这是非常快速的操作。

  • 问题内容: 我想找出$ all是否包含所有$ search_this值并返回true或false。有什么想法吗? 问题答案: 看一下array_intersect()。