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

如何获取array数组中unique values(唯一值)对应的index索引

获取数组唯一值对应索引的实现方案

以下方案默认返回每个唯一值首次出现的索引,可根据需求调整为返回末次出现的索引。

方案1:单次遍历实现(时间复杂度O(n),适合大数组)

通过Set记录已经出现过的值,遍历过程中直接收集符合要求的索引,仅需遍历数组一次,性能最优。

function getUniqueIndexes(arr) {
  const existed = new Set()
  return arr.reduce((result, val, idx) => {
    if (!existed.has(val)) {
      existed.add(val)
      result.push(idx)
    }
    return result
  }, [])
}

// 测试用例
const testArray = ['a', 'b', 'a', 'c', 'b', 'd']
console.log(getUniqueIndexes(testArray)) // 输出:[0, 1, 3, 5]

方案2:极简写法(时间复杂度O(n²),适合小数组)

利用Array.indexOf会返回元素首次出现位置的特性,直接过滤非首次出现的索引即可,代码更短。

const getUniqueIndexes = arr => arr
  .map((_, idx) => idx)
  .filter(idx => arr.indexOf(arr[idx]) === idx)

场景适配

如果需要获取每个唯一值最后一次出现的索引,可使用Map记录每个值的最新索引,最终提取所有值即可:

function getLastUniqueIndexes(arr) {
  const valToIndex = new Map()
  arr.forEach((val, idx) => valToIndex.set(val, idx))
  return Array.from(valToIndex.values())
}

// 测试用例输入['a', 'b', 'a', 'c', 'b', 'd'],输出:[2, 4, 3, 5]

如果需要判断引用类型(对象、数组)的唯一性,可自定义唯一标识生成逻辑,替换Set/Map的键为自定义标识即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:36:03