js数组和字符串去重复几种方法

js数组去重复几种方法

第一种:也是最笨的吧。

Array.prototype.unique1 = function () {
var r = new Array();
label:for(var i = 0, n = this.length; i < n; i++) {
for(var x = 0, y = r.length; x < y; x++) {
if(r[x] == this[i]) {
continue label;
}
}
r[r.length] = this[i];
}
return r;
}
第二种:这个正则天书一样。

Array.prototype.unique2 = function () {
return this.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(",");
}
第三种:使用对象的【hasOwnProperty】方法

Array.prototype.unique3 = function() {
var temp = {}, len = this.length;
for(var i=0; i < len; i++) {
var tmp = this[i];
if(!temp.hasOwnProperty(tmp)) {
temp[this[i]] = "my god";
}
}

len = 0;
var tempArr=[];
for(var i in temp) {
tempArr[len++] = i;
}
return tempArr;
}
第四种:先排序,前项比后项。这个方法挺简单的,但也实用

Array.prototype.unique4 = function () {
var temp = new Array();
this.sort();
for(i = 0; i < this.length; i++) {
if( this[i] == this[i+1]) {
continue;
}
temp[temp.length]=this[i];
}
return temp;

}

下面是以前经常用的,效率也很好。有点想hash表的感觉。

Array.prototype.unique5 = function() {
var res = [], hash = {};
for(var i=0, elem; (elem = this[i]) != null; i++) {
if (!hash[elem])
{
res.push(elem);
hash[elem] = true;
}
}
return res;
}

还能有种更简单明了的写法:

/*应用了集合的思想,有序不重复*/
function removeDuplicates(arr) {

var temp = {}, r = [];

for (var i in arr)

temp[arr[i]] = true;

for (var k in temp)

r.push(k);

return r;

}

看起来挺好容易的吧

经过自己验证过了,代码如下:

 1 function removeDuplicates(arr) {
 2
 3     var temp = {}, r = [];
 4
 5     for (var i in arr)
 6
 7         temp[arr[i]] = true;
 8
 9     for (var k in temp)
10
11         r.push(k);
12
13     return r;
14
15 }
16
17 //用法
18
19 var fruits = [‘apple‘, ‘orange‘, ‘peach‘, ‘apple‘, ‘strawberry‘, ‘orange‘, ‘strawberry‘, ‘orange‘];
20
21 var uniquefruits = removeDuplicates(fruits);
22 alert(uniquefruits);

字符串去重方法:

采用正则

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

 1     function strUnique(){
 2         var str = "abc, abcd, abc, abcde, abcd, abcde";
 3         var ret = [];
 4         str.replace(/[^,]+/g, function($1, $2){
 5             (str.indexOf($1) == $2) && ret.push($1);
 6         });
 7         alert(ret);
 8         return ret;
 9     }
10
11 strUnique();
时间: 2024-12-15 07:16:08

js数组和字符串去重复几种方法的相关文章

js 数组去重复两种方法一看就懂

var arr=[1,1,2,2,3,5,2];function uniqueArr(arr){ var data=[]; for(var i=0;i<arr.length;i++){ if(data.indexOf(arr[i])<0){ data.push(arr[i]); } } return data;}console.log(uniqueArr(arr));var arr1=[1,2,2,5,5,4,5,6,3,36,52];function uniquearr(arr){ var

js数组遍历的常用的几种方法以及差异和性能优化

<script type="text/javascript"> /*对比: 1.map速度比foreach快 2.map会返回一个新数组,不对原数组产生影响,foreach不会产生新数组,foreach返回undefined 3.map因为返回数组所以可以链式操作,foreach不能 4, map里可以用return ,而foreach里用return不起作用,foreach不能用break,会直接报错*/ /*方法一:*/ var arr1 = [1, 2, 3, 4,

js 数组,字符串,JSON,bind, Name

/** * Created by W.J.Chang on 2014/5/23. */ // 判读是否是数组的方法 console.log(Array.isArray(new Array)); console.log(Array.isArray([])); var arr = [1,2,3]; // 遍历方法 arr.forEach(function (v){ console.log(v); }); console.log("---------------------"); // 过滤

js数组、字符串常用方法

Posted on 2016-01-08 23:19 _银弹 阅读(486) 评论(0) 编辑 收藏 常常在开发中,会使用到很多js数组和字符串的处理方法,这里列举一些常用到的一些,方便大家参考使用. 数组方面 push:向数组尾部增加内容,返回的是新数组的长度. var arr = [1,2,3]; console.log(arr); var b = arr.push(4); console.log(b); console.log(arr); // [1, 2, 3] // 4 //表示当前数

随机生成数组,并且去重复项

1:先随机生成一组数字,并插入数组中: function randomArray(len, min, max) { if( len > (max - min +1) ){throw new Error('len > (max - min +1)')} //检查所设定数组是否超出预定总数,如果是则抛出异常 var result = []; for( var i = 0; i < len; i++){ var e = Math.floor(Math.random()*( max - min

JavaScript学习笔记第一天——字符串连接的N种方法

Javascript 字符串的连接方法有多种,但效率却有很大区别. 1.逐个字符串相加 var arr = ['item 1', 'item 2', 'item 3', ...]; var list = ''; for (var i = 0, l = arr.length; i < l; i++) { list += '<li>' + arr[i] + '</li>'; } list = '<ul>' + list + '</ul>'; 这种最常见的,

Jsp页面跳转和js控制页面跳转的几种方法

Jsp 页面跳转的几种方法 1. RequestDispatcher.forward() 在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet或者是JSP到另外的一个Servlet.JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递. 但forward()无法重定向至有frame的jsp文件,可以重定向至有

C#删除字符串中重复字符的方法

本文实例讲述了C#删除字符串中重复字符的方法.分享给大家供大家参考.具体实现方法如下: 代码如下: #region 删除重复字符 string s = "sdfffffsrlkjesgljfdg03940864e5=_0R9DTGR98YUI\\|||'\\???fdf///"; Response.Write("<br/>String:" + s + "<br/>Result:"); IEnumerable<char

JS中date日期初始化的5种方法

原文:JS中date日期初始化的5种方法 创建一个日期对象: 代码如下: var objDate=new Date([arguments list]); 参数形式有以下5种: 1)new Date("month dd,yyyy hh:mm:ss"); 2)new Date("month dd,yyyy"); 3)new Date(yyyy,mth,dd,hh,mm,ss); 在程序中我使用的第三种初始化方法,总是显示格式化的参数不正确,仔细看了一下一定要是整型的才可