Javascript 相交,但仅匹配类型

Javascript 相交,但仅匹配类型,javascript,arrays,Javascript,Arrays,我需要解决以下问题。 我有一个数组,但其中有各种类型的数据。 示例:[1,2,'string1','string2'] 我需要一个函数,做交集,但只有匹配的类型。 这就是我的意思: intersect([1,2,'string1','string2'],['string2','string3']) // [1,2,'string2'] intersect([1,2,'string1','string2'],[2,3]) // [2,'string1','string2'] 第二个参数总是相同的

我需要解决以下问题。 我有一个数组,但其中有各种类型的数据。 示例:[1,2,'string1','string2']

我需要一个函数,做交集,但只有匹配的类型。 这就是我的意思:

intersect([1,2,'string1','string2'],['string2','string3']) // [1,2,'string2']
intersect([1,2,'string1','string2'],[2,3]) // [2,'string1','string2']
第二个参数总是相同的类型,它不是混合的。 我有这个:

function intersect(a, b) {
    var t;
    if (b.length > a.length) t = b, b = a, a = t; // indexOf to loop over shorter
    return a.filter(function (e) {
        return b.indexOf(e) > -1;
    });
}

但它也总是删除另一种类型:(

您可以使用lodash
交叉点
方法。我认为调用此交叉点会产生误导,您似乎希望从第一个数组中删除与第二个数组类型相同(但不匹配)的任何数组项。是否正确?(另外,第二个数组是否始终仅为一种类型?)您确定示例正确吗?集合/数组的交集意味着两者中的元素都是通用的。
 function intersect(a, b) {
    var t;
    if (b.length > a.length) t = b, b = a, a = t; // indexOf to loop over shorter
    
    const type = typeof(b[0]); //check the type of the second array's first element since each element has the same type

    const tempArray = a.filter(function (e) {
      return typeof(e) !== type;
    }); //filter the first array if it has different item types than the second array's elements

    return tempArray.concat(a.filter(function (e) {
        return b.indexOf(e) > -1;
    }));
}

console.log(intersect([1,2,'string1','string2'],['string2','string3'])) // [1,2,'string2']