Javascript 相交,但仅匹配类型
我需要解决以下问题。 我有一个数组,但其中有各种类型的数据。 示例:[1,2,'string1','string2'] 我需要一个函数,做交集,但只有匹配的类型。 这就是我的意思: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'] 第二个参数总是相同的
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']