js 数组&字符串 去重

Array.prototype.unique1 = function()
{
	var n = []; //一个新的临时数组
	for(var i = 0; i < this.length; i++) //遍历当前数组
	{
		//如果当前数组的第i已经保存进了临时数组,那么跳过,
		//否则把当前项push到临时数组里面
		if (n.indexOf(this[i]) == -1) n.push(this[i]);
	}
	return n;
}
Array.prototype.unique2 = function()
{
	var n = {},r=[]; //n为hash表,r为临时数组
	for(var i = 0; i < this.length; i++) //遍历当前数组
	{
		if (!n[this[i]]) //如果hash表中没有当前项
		{
			n[this[i]] = true; //存入hash表
			r.push(this[i]); //把当前数组的当前项push到临时数组里面
		}
	}
	return r;
}
Array.prototype.unique3 = function()
{
	var n = [this[0]]; //结果数组
	for(var i = 1; i < this.length; i++) //从第二项开始遍历
	{
		//如果当前数组的第i项在当前数组中第一次出现的位置不是i,
		//那么表示第i项是重复的,忽略掉。否则存入结果数组
		if (this.indexOf(this[i]) == i) n.push(this[i]);
	}
	return n;
}
Array.prototype.unique4 = function()
{
  this.sort();	//先排序  var res = [this[0]]; //结果数组
  for(var i = 1; i < this.length; i++) //从第二项开始遍历
  {    //先将原数组进行排序;检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置;有一定的局限性,去重结果也是排序的。    if (this[i] !== res[res.length-1]) res.push(this[i]);
  }
  return res;
}
第1种和第3种方法都用到了数组的indexOf方法。此方法的目的是寻找存入参数在数组中第一次出现的位置。很显然,js引擎在实现这个方法的时候会遍历数组直到找到目标为止。所以此函数会浪费掉很多时间。 而第2中方法用的是hash表。把已经出现过的通过下标的形式存入一个object内。下标的引用要比用indexOf搜索数组快的多。但是内存占用方面应该第二种方法比较多,因为多了一个hash表。这就是所谓的空间换时间。第二种方法可以通过typeof再做细点;不然 new Number("1") 和 1 区分不了

/* 冒泡排序 */
function bubbleSort(arr){
  var len = arr.length;var d;
  for(var i = 0;i < len;i++){
    for(var j = 0; j < len;j++){
      if(arr[i] < arr[j]){
        d = arr[j];arr[j] = arr[i];arr[i] = d;
      }
    }
  }
  return arr;
}

字符串去重

1、先转化为数组:"aabbcccdd".split("")

2、正则:"aabbcccdd".replace(/(.)(?=.*\1)/g,"")

参考:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277
时间: 2024-11-20 06:25:34

js 数组&字符串 去重的相关文章

JS实现字符串去重,数组去重

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>去重</title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 /*数组去重*/ 10 function quch

js实现字符串去重

1 /** 2 * 字符串去重 3 * \r\n字符串分隔符 4 * $1分割后的字符串,$2字符串的索引 5 * 以分隔符将字符串分割,根据分割后的数组元素的个数进行循环比较 6 */ 7 function strUnique(){ 8 var str="abc,abcd,abc,abcde"; 9 var ret = []; 10 str.replace(/[^,]+/g, function($1, $2) { 11 (str.indexOf($1) == $2) &&am

js数组&amp;&amp;字符串&amp;&amp;定时器2

一.系统时间对象Date 方法 描述 Date() 返回当日的日期和时间. getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31). getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6). getMonth() 从 Date 对象返回月份 (0 ~ 11). getFullYear() 从 Date 对象以四位数字返回年份. getHours() 返回 Date 对象的小时 (0 ~ 23). getMinutes() 返回 Date 对象的分钟 (0 ~

【算法】两个数组字符串去重追加

1 数组去重 python实现 #调用内置函数去重 def func(str): len1=len(str) len2=len(list(set(str))) print("去重后的结果是:",list(set(str)),"\t去重个数是:",(len1-len2)) #for 循环去重 def func1(str): nums=[] for n in str: if n not in nums: nums.append(n) print("去重后的结果

js 数组,字符串,json互相转换

数组转字符串 var arr = [1,2,3,4,'巴德','merge']; var str = arr.join(','); console.log(str); // 1,2,3,4,巴德,merge 字符串转数组 var str = '1,2,3,4,巴德,merge'; var arr = str.split(','); console.log(arr); // ["1", "2", "3", "4", "

js数组快速排序/去重

数组的排序 var arr = []; for(var i=0;i<20;i++){      arr.push(Math.floor(Math.random()*100))  }  //生成一个无序的arr数组  function sort(arr,start,end){      //数组长度为1      if(start == end ){          return [arr[start]]      }else if(start == end-1){          //数组长

js 数组深度去重

在日常开发中难免会遇到数组去重的难题,最近,正是给一个数组去重的难题难到了.作为开发者的我们,一旦遇到问题必然就是谷歌,百度,MDN....搜索一波,但是,这些地方都没有找到我想要的答案.或许看到这你会开喷了,咋没有啊,网上一大堆去重方法,但是,这里的需求要的是深度去重,也就是说,引用类型也要去掉!!这时你会发现很多方法都不管用了,看了一波度娘的答案,绝大部分的都是循环,索引相等的方法去重,而且举的例子都是基本数据类型的去重,如果手上拿的是一个全是引用类型的数组,你会发现这些方法都没用了.在讲正

js 数组,字符串,json互相转换(在select实现多个输入的时候与后台交互常使用)

数组转字符串 var arr = [1,2,3,4,'巴德','merge']; var str = arr.join(','); console.log(str); // 1,2,3,4,巴德,merge 字符串转数组 var str = '1,2,3,4,巴德,merge'; var arr = str.split(','); console.log(arr); // ["1", "2", "3", "4", "

js数组 字符串 Set Map的操作

数组 arr.concat(arrayX,arrayX); 连接两个数组.arrayX可以为具体值 或者数组  不改变原数组 arr.join() 用指定符号将数组转为字符串  不指定符号则使用逗号 arr.pop() 删除并返回数组的最后一个元素 数组长度减1 数组为空则返回undefined arr.push() 数组末尾添加一个或者多个元素 返回新长度 arr.reverse() 颠倒数组顺序 改变原数组 arr.shift() 删除并返回数组的第一个元素 数组为空 则返回undefine