我有一个目标数组[“apple”、“banana”、“orange”],我想检查其他数组是否包含任何一个目标阵列元素。

例如:

["apple","grape"] //returns true;

["apple","banana","pineapple"] //returns true;

["grape", "pineapple"] //returns false;

如何在JavaScript中实现?


当前回答

嵌套调用.find()的Array.filter()将返回第一个数组中属于第二个数组的所有元素。检查返回数组的长度,以确定第一个数组中是否有第二个数组。

getCommonItems(firstArray, secondArray) {
  return firstArray.filter((firstArrayItem) => {
    return secondArray.find((secondArrayItem) => {
      return firstArrayItem === secondArrayItem;
    });
  });
}

其他回答

不确定这在性能方面可能有多高效,但这就是我使用数组解构来保持一切美好和简短的原因:

const shareElements = (arr1, arr2) => {
  const typeArr = [...arr1, ...arr2]
  const typeSet = new Set(typeArr)
  return typeArr.length > typeSet.size
}

由于集合不能有重复的元素,而数组可以,因此组合两个输入数组,将其转换为集合,并比较集合大小和数组长度将告诉您它们是否共享任何元素。

ES6溶液:

let arr1 = [1, 2, 3];
let arr2 = [2, 3];

let isFounded = arr1.some( ai => arr2.includes(ai) );

与之不同:必须包含所有值。

let allFounded = arr2.every( ai => arr1.includes(ai) );

希望,会有所帮助。

我的解决方案应用了Array.prototype.some()和Array.proto原型.includes()数组助手,它们的工作效率也很高

ES6型const originalFruits=[“苹果”、“香蕉”、“橙子”];const fruits1=[“苹果”、“香蕉”、“菠萝”];const fruits2=[“葡萄”,“菠萝”];const commonFruits=(myFruitsArr,otherFruitsAr)=>{return myFruitsArr.some(fruit=>otherFruitsAr.includes(fruit))}console.log(commonFruits(originalFruits,fruits1))//返回true;console.log(commonFruits(originalFruits,fruits2))//返回false;

您正在寻找两个数组之间的交集。你有两种主要的交叉点类型:“每个”和“一些”。让我举几个好例子:

let brands1 = ['Ford', 'Kia', 'VW', 'Audi'];
let brands2 = ['Audi', 'Kia'];
// Find 'every' brand intersection. 
// Meaning all elements inside 'brands2' must be present in 'brands1':
let intersectionEvery = brands2.every( brand => brands1.includes(brand) );
if (intersectionEvery) {
    const differenceList = brands1.filter(brand => !brands2.includes(brand));
    console.log('difference list:', differenceList);
    const commonList = brands1.filter(brand => brands2.includes(brand));
    console.log('common list:', commonList);
}

如果条件不满足(比如你在品牌中加入了“梅赛德斯”),那么“intersectionEvery”就不满足了——这将是错误的。

如果满足条件,它将把[“福特”、“大众”]列为区别,把[“起亚”、“奥迪”]列为了常见列表。

沙盒:https://jsfiddle.net/bqmg14t6/

SOME

let brands1 = ['Ford', 'Kia', 'VW', 'Audi'];
let brands2 = ['Audi', 'Kia', 'Mercedes', 'Land Rover'];
// Find 'some' brand intersection. 
// Meaning some elements inside 'brands2' must be also present in 'brands1':
let intersectionSome = brands2.some( brand => brands1.includes(brand) );
if (intersectionSome) {
    const differenceList = brands1.filter(brand => !brands2.includes(brand));
    console.log('difference list:', differenceList);
    const commonList = brands1.filter(brand => brands2.includes(brand));
    console.log('common list:', commonList);
}

我们在这里寻找一些常见的品牌,但不一定全部。

它将把[“福特”、“大众”]列为不同品牌,把[“起亚”、“奥迪”]列为了共同品牌。

沙盒:https://jsfiddle.net/zkq9j3Lh/

这可以通过简单地遍历主数组并检查其他数组是否包含任何目标元素来完成。

试试看:

function Check(A) {
    var myarr = ["apple", "banana", "orange"];
    var i, j;
    var totalmatches = 0;
    for (i = 0; i < myarr.length; i++) {
        for (j = 0; j < A.length; ++j) {
            if (myarr[i] == A[j]) {

                totalmatches++;

            }

        }
    }
    if (totalmatches > 0) {
        return true;
    } else {
        return false;
    }
}
var fruits1 = new Array("apple", "grape");
alert(Check(fruits1));

var fruits2 = new Array("apple", "banana", "pineapple");
alert(Check(fruits2));

var fruits3 = new Array("grape", "pineapple");
alert(Check(fruits3));

JSFIDDLE演示