javascript - 试图检测一个数组是否缺少另一个数组的元素
问题描述
我有以下代码将array1与array2进行比较以确定array1是否缺少array2中的值:
var array1 = ['bob', 'george'];
var array2 = ['bob', 'george', 'frank'];
var isMissing = false;
console.log(missing(array1, array2));
function missing(a,b) {
if (a > b) {
var length = a.length;
} else if (b > a) {
var length = b.length;
} else {
var length = a.length;
}
for (var i = 0; i < length; i++ ) {
if (b.indexOf(a[i]) == -1) {
isMissing = true;
} else {
isMissing = false;
}
if (isMissing == 'true') {
break;
}
}
return isMissing;
}
上述方法并不总是有效。请参阅下表了解情景和结果与预期结果:
var array1 = ['bob', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
var array1 = ['bob', 'frank'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
var array1 = ['frank', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
var array1 = ['frank', 'bob', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:false, expected: false
var array1 = ['frank', 'george', 'sue', 'frank'];
var array2 = ['bob', 'george', 'frank']; // result:false, expected: true
var array1 = ['frank', 'george', 'sue', 'frank'];
var array2 = ['bob', 'george', 'frank', 'janet']; // result:false, expected: true
var array1 = ['frank', 'george'];
var array2 = ['frank', 'frank']; // result: false, expected: true
我不确定是什么问题...
我已经阅读了这个线程,但它对我没有任何成果,因为我不需要知道缺少哪个元素,我只需要知道是否缺少一个元素。
请不要使用外部库。谢谢。
解决方案
function missing(array1, array2) {
const copy = array1.slice()
return array2.some(element => {
const index = copy.indexOf(element)
if(index >= 0) copy.splice(index, 1);
return index < 0
})
}
var array1 = ['bob', 'george'];
var array2 = ['bob', 'george', 'frank'];
console.log(missing(array1, array2))
var array1 = ['bob', 'frank'];
var array2 = ['bob', 'george', 'frank'];
console.log(missing(array1, array2))
var array1 = ['frank', 'george'];
var array2 = ['bob', 'george', 'frank'];
console.log(missing(array1, array2))
var array1 = ['frank', 'bob', 'george'];
var array2 = ['bob', 'george', 'frank'];
console.log(missing(array1, array2))
var array1 = ['frank', 'george', 'sue', 'frank'];
var array2 = ['bob', 'george', 'frank'];
console.log(missing(array1, array2))
var array1 = ['frank', 'george', 'sue', 'frank'];
var array2 = ['bob', 'george', 'frank', 'janet'];
console.log(missing(array1, array2))
var array1 = ['frank', 'george'];
var array2 = ['frank', 'frank'];
console.log(missing(array1, array2))
推荐阅读
- python - OSError:[Errno 48] 地址已在使用中
- python - Python - 长 .txt 文件的文件夹,在每个 .txt 文件中搜索各种子字符串,附加到列表
- wordpress - 创建页面的 Wordpress 自定义帖子类型
- python - 我的第一个 if 语句程序出现逻辑错误
- r - Shiny 服务器外的数据收集进度条
- php - 我有 6 个产品,我想使用 php foreach 在每行显示 3 个产品
- jquery - 如何将类属性添加到 Bootstrap 树视图项?
- java - 如何通过 SeleniumWebDriver 和 Java 根据 HTML 单击带有文本作为注销的元素
- ansible - Ansible 中“自我”的等价物
- laravel - 获取关系中具有特定值的模型