我有两个数组,希望部分匹配它们(即第一个数组的某些元素应该出现在第二个数组中,但不是全部).我有一个解决方案,但我觉得我可以使用一个更有效的.以下是用例:

const array_1 = [ 7, 6 ];
const array_2 = [ 4, 6 ,7, 2, 9 ];

const isSomeItemMatched = array_1.some( item => array_2.includes(item) );
const isAllItemMatched = array_1.every( item => array_2.includes(item) );

const isPartiallyMatched = !isAllItemMatched && isSomeItemMatched;

请让我知道,如果有一个优化的方式做这件事.

推荐答案

您的解决方案适用于小型array.如果它们变大,您将受益于将一个变为一组:

const array_1 = [ 7, 6 ];
const array_2 = [ 4, 6 ,7, 2, 9 ];

function isPartialMatch(a, b) {
    const setA = new Set(a);
    return b.some(x => setA.has(x)) && b.some(x => !setA.has(x));
}

console.log(isPartialMatch(array_1, array_2));

Javascript相关问答推荐

Chart.js 4.4.2,当悬停在一个数据点上时,如何在工具提示中拥有多个数据点/标签?

JS:XML insertBefore插入元素

如何发送从REST Api收到的PNG数据响应

如何在Angular拖放组件中同步数组?

使用VUE和SCSS的数字滚动动画(&;内容生成)

如何在我的Next.js项目中.blob()我的图像文件?

更新Redux存储中的对象数组

OnClick更改Json数组JSX中的图像源

未捕获语法错误:Hello World中的令牌无效或意外

P5.js中的分形树

JavaScript将字符串数字转换为整数

Chart.js Hover线条在鼠标离开时不会消失

如何设置时间选取器的起始值,仅当它获得焦点时?

如何调整下拉内容,使其不与其他元素重叠?

与find()方法一起使用时,Mongoose中的$or运算符没有提供所有必需的数据

我怎么才能拿到幼风登录?

如何调试从CEPRESS测试文件调用的Java脚本文件

不会执行不返回值的快速路径作为函数

将句子拆分成单词,并在JavaScript中颠倒

按下按钮时更改图标