`
jdhh_hcm
  • 浏览: 11708 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

如何消除数组里面重复的元素(一道我经历过的JS面试题)

阅读更多

前段时间去了一个公司面试,做题过程中遇到这么一个JS题目“如何消除数组中重复的元素”。我的JS是很菜的,当时回答得有些勉强,具体思路是这样的,双层循环,逐个判断,不重复则push进一个新的数组,最后返回新数组。下面是具体的js代码:

function getNewArr(oldArr){
if(typeof oldArr != "object") return oldArr;
var newArr = [];
var oldArrLen = oldArr.length-1, newArrLen = -1, flag = false;
for(var i=oldArrLen; i>=0; i--){
  flag = false;
  for(var j=newArrLen; j>=0; j--){
   if(oldArr === newArr[j]){
    flag = true;
    break;
   }
  }
  if(!flag) newArrLen = newArr.push(oldArr)-1;
}
return newArr;
}

 

也许这个方法对于小型数组是可行的,但是对于一些大型的数组,我想效率可能会直线下降,但是我暂时只能想到这么做,悲催啊。

关于判断相等那里,我使用了全等“===”,是考虑到JS数组中存放的字段类型不确定,举个简单的例子:

JS中 “123”==123 结果会返回true,这里的操作其实是JS自身转换过的,故对于js这样的弱类型语言,双等用在这里我感觉不是很合适,所以我使用了全等“===”,即“123”===123 会返回false。

也许这里还会有更好,更效率快捷的方法,如果你知道,请留言讨论,谢谢!

2
0
分享到:
评论
2 楼 jdhh_hcm 2011-09-19  
qingming.com 写道
如果类型相同,可不可以用数组的名字存取法,相当于hash表。

<script type="text/javascript">
//如果类型相同,可不可以用数组的名字存取法,相当于hash表。
var oldArr = new Array(3,4,3,4,3,3);
var newArr = new Array();
var map = new Object();
for(x in oldArr){
    map[""+oldArr[x]]=oldArr[x];
}
var index = 0;
for(x in map){
    newArr[index++]=map[x];
}
alert(oldArr.length);
alert(oldArr);
alert(newArr.length);
alert(newArr);
</script>

兄台,你的方法经过测试是可行的,但是我不是很了解“数组的名字存取法”与“hash表”,特别是代码中的这一句“ map[""+oldArr[x]]=oldArr[x];”,能详细说说吗?
先表示感谢!
1 楼 qingming.com 2011-09-17  
如果类型相同,可不可以用数组的名字存取法,相当于hash表。

<script type="text/javascript">
//如果类型相同,可不可以用数组的名字存取法,相当于hash表。
var oldArr = new Array(3,4,3,4,3,3);
var newArr = new Array();
var map = new Object();
for(x in oldArr){
    map[""+oldArr[x]]=oldArr[x];
}
var index = 0;
for(x in map){
    newArr[index++]=map[x];
}
alert(oldArr.length);
alert(oldArr);
alert(newArr.length);
alert(newArr);
</script>

相关推荐

    常见数组面试题

    ### 常见数组面试题解析 #### 一、数组求和 **题目描述:** 使用递归方式实现数组求和,并且要求整个函数只使用一行代码。 **解答:** ```cpp int sum(int* a, int n) { return n == 0 ? 0 : sum(a, n - 1) + a...

    JavaScript 数组面试题

    JavaScript 数组面试题

    java基础面试题数组中重复的数字

    java基础面试题数组中重复的数字本资源系百度网盘分享地址

    Java - 数组面试题 - 个人整理

    数组 - 需要参加面试的人

    js面试题面试题面试题

    根据给定的文件信息,以下是对每一道JS面试题的知识点进行详细解析: ### 第一题:编写一个方法求一个字符串的字节长度 #### 解析: 在这道题目中,我们需要编写一个函数来计算字符串的字节长度。这里的重点在于...

    JavaScript面试题阿里巴巴JavaScript面试题 阿里巴巴

    ### JavaScript面试题解析 #### 一、ES6的新语法 ES6(ECMAScript 6)是JavaScript语言标准的一个重要版本,它引入了许多新的特性和语法改进,旨在提高开发效率和代码可读性。以下是一些重要的新特性: 1. **let ...

    javascript面试题汇总

    JavaScript面试题汇总涵盖了广泛的知识点,以下是其中一些关键点的详细说明: 1. **变量声明**:在JavaScript中,可以使用var关键字声明变量。在给定的题目中,选项A `( )` 是一个无效的声明,因为没有提供任何值,...

    91道js面试题,附必过答案.pdf

    为了提高 JavaScript 的性能,需要遵循严格模式、将 js 脚本放在页面底部、将 js 脚本将脚本成组打包、使用非阻塞方式下载 js 脚本、尽量使用局部变量来保存全局变量、尽量减少使用闭包、使用 window 对象属性方法时...

    关于数组的几道面试题1

    8. **找出数组中唯一的重复元素**: 可以使用“快慢指针”(龟兔赛跑)的方法,找到数组中的环,环的起始位置即为重复元素。 9. **找出出现奇数次的元素**: 所有元素异或一次,得到的结果就是出现奇数次的元素,...

    java面试题-leetcode题解之第34题在排序数组中查找元素的第一个和最后一个位置.zip

    第34题,"在排序数组中查找元素的第一个和最后一个位置",是这样一类问题:它不仅测试了基本的数组操作,还涉及到二分查找的高级应用。下面我们将详细探讨这个问题以及相关的知识点。 ### 问题描述 给定一个已排序...

    JavaScript面试题集锦

    "JavaScript面试题集锦详解" 这篇文章涵盖了JavaScript的多个方面,包括eval函数、window和document对象、null和undefined的区别、数组的map方法、事件机制、use strict模式等。 eval函数 eval函数可以将字符串...

    找出数组中重复的数字.rar

    剑指offer面试题库中第三题的C语言代码。在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

    面试题总结:数组和链表的区别 数组和链表.pdf

    数组是一种连续存储的数据结构,即数组中的元素在内存中是连续存储的。这使得数组在查找数据时效率非常高,因为内存地址是连续的。然而,数组也存在一些缺点: * 需要在存储之前申请一块连续的内存空间,并且在编译...

    Java面试-leetcode题解之第442题数组中重复的数据.zip

    java面试 Java面试_leetcode题解之第442题数组中重复的数据

    一套完整的javascript面试题(含有答案)

    JavaScript是一种广泛应用于Web开发的...以上是对这套JavaScript面试题的解析,涵盖的知识点全面,适合准备JavaScript面试的开发者进行自我检测和学习。理解并掌握这些知识点,对于提升JavaScript编程能力大有裨益。

    2019js数组前端经典算法面试题.docx

    本篇文章将详细探讨文档中提及的几个经典的JavaScript数组算法面试题。 首先,我们来看第一个问题:求斐波那契数列的前20个数字。斐波那契数列是一个序列,其中每个数字是前两个数字的和。数学上,它可以通过递归...

    前端js面试题WORD.docx

    本资源摘要信息汇总了前端JS面试题中的一些重要知识点,涵盖了JQuery选择器、JQuery插件实现方式、bind和live方法的区别、JS和JQ对象的转换、去除数组重复项等内容。 一、JQuery选择器 JQuery选择器是JQuery库中最...

    js面试技巧,面试题总结,MK

    这份"js面试技巧,面试题总结,MK"文档显然包含了作者在学习过程中整理的JS面试重点和常见问题,对于准备JS面试或者巩固基础知识的人来说是一份宝贵的资料。 在JS面试中,以下知识点经常会被考察: 1. **基础概念*...

    java面试-leetcode面试题解之第34题在排序数组中查找元素的第一个和最后一个位置-java题解.zip

    标题中的“java面试-leetcode面试题解之第34题在排序数组中查找元素的第一个和最后一个位置-java题解”指的是一个关于Java编程的面试准备资料,特别针对LeetCode的第34题。LeetCode是一个在线平台,提供各种编程挑战...

    数组高频面试题精讲.ppt

    数组高频面试题精讲

Global site tag (gtag.js) - Google Analytics