我想将一个数组与另一个数组进行比较:
array1 = ['billy', 'bob', 'paul'];
array2 = ['billy', 'michael', 'bob'];
我想检测 array2 是否包含在 array1 中找不到的名称。
array2 可以比 array1 长或短,换句话说,array2 可能缺少名称或比 array1 具有更多名称,但 array2 不能与 array1 具有不同的名称。
到目前为止,我可以检测到数组 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,但可以更少。
最佳答案
此方法使用函数 some
当至少一个名字不在 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
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 将一个数组与另一个数组进行比较,以确保第二个数组不包含不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54896340/