首页 > 解决方案 > 试图检测一个数组是否缺少另一个数组的元素

问题描述

我有以下代码将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

我不确定是什么问题...

我已经阅读了这个线程,但它对我没有任何成果,因为我不需要知道缺少哪个元素,我只需要知道是否缺少一个元素。

请不要使用外部库。谢谢。

标签: javascriptarraysloops

解决方案


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))


推荐阅读