javascript - js中查找所有重复记录的索引

标签 javascript jquery

假设我有一个如下数组:

Arr1 = [12,30,30,60,11,12,30]

我需要找到数组中重复的元素的索引,例如

ans: 0,1,2,5,6

我已经尝试过this代码,但它只考虑单个元素来检查重复项。

最佳答案

首先使用 filter() 获取所有重复项然后使用 reduce()仅获取数组中 dups 中的元素的索引

const arr = [12,30,30,60,11,12,30];
const dups = arr.filter(x => arr.indexOf(x) !== arr.lastIndexOf(x));
const res = arr.reduce((ac, a, i) => {
  if(dups.includes(a)){
    ac.push(i)
  }
  return  ac;
}, []);
console.log(res)

上述算法的时间复杂度为O(n^2) 。如果你想要O(n)您可以使用以下方式

const arr = [12,30,30,60,11,12,30];
const dups = arr.reduce((ac, a) => (ac[a] = (ac[a] || 0) + 1, ac), {})
const res = arr.reduce((ac, a, i) => {
  if(dups[a] !== 1){
    ac.push(i)
  }
  return  ac;
}, []);
console.log(res)

关于javascript - js中查找所有重复记录的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60667307/

相关文章:

javascript - 使用 jQuery 提交数据远程 Rails 表单

jquery - 使用jquery使图像转 Angular

Javascript:jQuery 帮助从附加到新函数中获取 <div> 文本以进行自动完成(使用 OLEDB 作为源)

javascript - 如何传递一个带值的参数来更改默认值和一个仅在 UL 中有多个 li 时才运行的条件?

javascript - 不允许将顶部框架导航到数据 URL : JsPDF

javascript - 将 PHP 值显示到不刷新的页面

javascript - 如何使用动态生成的表动态添加行

javascript - 无法使用ajax存储结果

javascript - 如何使用JS高效地找到字符串的宽度

HTML 文本框中的 Javascript 刷新时间;通过 ID 获取元素错误