我想将一个阵列与另一个阵列进行比较:
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更多的特定名称的实例,但可以更少。
如果你想要一个简单易懂的解决方案,你不需要使用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);
您可以使用每一个
来检查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
此方法使用函数 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()。