为了账号安全,请及时绑定邮箱和手机立即绑定

比较数组中的值,如果任何值匹配,则增加第一个数组中的值

比较数组中的值,如果任何值匹配,则增加第一个数组中的值

德玛西亚99 2022-10-21 09:41:44
我有这段代码来检查两个数组是否有任何匹配的值,如果有任何值匹配我 ++ array1 中的所有内容我想知道是否有更好的方法来做到这一点,因为我觉得这是很多循环,我最终会有 5 个数组需要相互比较任何帮助将不胜感激!const array1 = [2, 9];const array2 = [2, 5, 9];function checkMatch(a, b) {  for (let i = 0; i < a.length; i++) {    for (let e = 0; e < b.length; e++) {      if (a[i] === b[e]) a[i]++;    }  }  return a;}console.log(checkMatch(array1, array2))
查看完整描述

4 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

您可以使用 aSet并将第一个数组映射到该值以及对该集合的该值的检查。


function checkMatch(a, b) {

    var values = new Set(b);

    return a.map(v => v + values.has(v));

}


console.log(checkMatch([2, 9], [2, 5, 9]));


查看完整回答
反对 回复 2022-10-21
?
千万里不及你

TA贡献1784条经验 获得超9个赞

你可以简单地利用map这里:


var array1 = [2, 9];

var array2 = [2, 5, 9];


var result = array1.map(n=>(array2.includes(n) ? n++ : n, n));


console.log(result);


查看完整回答
反对 回复 2022-10-21
?
慕森卡

TA贡献1806条经验 获得超8个赞

您可以使用includes方法检查列表 (a) 的所有元素是否存在于您需要比较的所有其他数组中。然后您可以更新列表(a)中的值


function checkMatch(a, b){

    for (let i = 0; i < a.length; i++) {

        if(b.includes(a[i])){

            a[i]++;

        }

    }

  return a;

};


const array1 = [2, 9];

const array2 = [2, 5, 9];


console.log(checkMatch(array1, array2))


查看完整回答
反对 回复 2022-10-21
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

如果您知道所有数组都已排序,那么您可以使用以下方法 -


代码 -

const array1 = [2, 9];


const array2 = [2, 5, 9];


function checkMatch(a, b) {

  let i = 0,

    j = 0;

  while (i < a.length && j < b.length) {

    if (a[i] === b[j]) {

      a[i]++;

      j++;

    } else if (a[i] < b[j]) {

      i++;

    } else j++;

  }

  return a;

}


console.log(checkMatch(array1, array2))

解释 -

上述方法的时间复杂度为 ,O(N+M)而您的时间复杂度可能为O(N*M).

在上述函数中,您利用了数组已排序这一事实。因此,当 时a[i] < b[j],您知道必须增加索引 i 才能获得可能等于或大于 的值b[j]。当 时,情况相同(但相反)a[i] > b[j]。因此,这种方法降低了代码的整体时间复杂度,并提高了整体效率。

希望这可以帮助!


查看完整回答
反对 回复 2022-10-21
  • 4 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号