You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当Array.includes返回true时,如何获取匹配元素的lastIndexOf?

问题描述

我有两个数组:

let arr1 = ['Red', 'Blue', 'Black', 'Gold', 'Silver', 'Black']
let arr2 = ['Black', 'White', 'Green']

我写了下面这个函数来检查arr1是否包含arr2里的值:

function findCommonElements(arr1, arr2) { 
  return arr1.some(item => arr2.includes(item))
}

这个函数能正常运行,因为arr1包含Black所以返回true,但我想知道当findCommonElements返回true时,匹配元素在arr1中的lastIndexOf位置。

解决方案

方法1:先筛选共同元素再取最后位置

先把arr1里所有在arr2中的元素筛选出来,然后取最后一个元素在arr1里的最后出现位置:

function findLastCommonIndex(arr1, arr2) {
  const commonElements = arr1.filter(item => arr2.includes(item));
  if (commonElements.length === 0) {
    return -1; // 没找到共同元素返回-1
  }
  return arr1.lastIndexOf(commonElements.at(-1));
}

// 测试结果
console.log(findLastCommonIndex(arr1, arr2)); // 输出 5

方法2:从后往前遍历(效率更高)

既然要找最后出现的位置,直接从arr1末尾开始找,第一个匹配arr2的元素索引就是结果,不用遍历整个数组。另外把arr2转成Set能提升查找速度:

function findLastCommonIndex(arr1, arr2) {
  const arr2Set = new Set(arr2);
  for (let i = arr1.length - 1; i >= 0; i--) {
    if (arr2Set.has(arr1[i])) {
      return i;
    }
  }
  return -1; // 无共同元素返回-1
}

// 测试结果
console.log(findLastCommonIndex(arr1, arr2)); // 输出 5

补充说明

  • 用Set存储arr2元素是因为Set.has()的查找速度比数组includes()更快,元素越多差异越明显。
  • 两种方法在没有共同元素时都返回-1,和原生lastIndexOf的返回逻辑一致。

内容的提问来源于stack exchange,提问作者Azeem Ansari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:03:22