首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中找到数组中的重复元素的所有方法是什么?

在javascript中找到数组中的重复元素的所有方法是什么?
EN

Stack Overflow用户
提问于 2019-12-17 10:57:34
回答 2查看 137关注 0票数 0

我在面试中被要求找到重复的元素。我已经找到了使用for循环的方法,但是面试官要求更好的方法来找出答案,这样可以在没有out for循环的情况下提高性能。我是探索Java脚本的初学者。是否有任何一种方法可以帮助寻找数组中的重复元素。下面是我的答案代码

代码语言:javascript
复制
var a = [1,2,3,3,4,4,5,5,6,7,8,8,9,10,11,12];

var repeatElements = [];
for (var i=0;i<a.length;i++){
 for(var j=1+i; j<a.length;j++){
 if (a[i]===a[j]){
repeatElements.push(a[i]);
}

}
}
console.log(repeatElements);

我已经检查了这个堆栈溢出问题的答案,Get all unique values in a JavaScript array (remove duplicates),使用过滤器查找重复是否更有效?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-17 11:06:05

在线性时间内这样做的一个好方法是使用一个频率表:

代码语言:javascript
复制
var a = [1,2,3,3,4,4,5,5,6,7,8,8,9,10,11,12];

var frequencyTable = {};
var repeatElements = [];
for (var i=0; i<a.length; i++){
 if (frequencyTable[a[i]]){
  frequencyTable[a[i]]++;
  repeatElements.push(a[i]);
 } else {
  frequencyTable[a[i]] = 1;
 }
}

console.log(repeatElements);

这样,您就只能循环遍历数组一次。

票数 1
EN

Stack Overflow用户

发布于 2019-12-17 11:08:18

您的解决方案具有O(n^2)复杂性。我想面试官是在期待你提供O(n)解决方案,这涉及到使用某种重复项目字典。看起来是这样的:

代码语言:javascript
复制
const a = [1,2,3,3,4,4,5,5,6,7,8,8,9,10,11,12];

function getRepetitives(arr) {
  const itemsDuplicates = {}
  
  arr.forEach(item => {
    itemsDuplicates[item] = itemsDuplicates.hasOwnProperty(item) 
      ? itemsDuplicates[item] + 1
      : 1 
  })
  
  const repetitives = Object.entries(itemsDuplicates).filter(([ k ,v ]) => v > 1).map(([k]) => k)
  
  return repetitives
}

console.log(getRepetitives(a))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59372760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档