js数组和字符串去重复几种方法
2016-02-01 10:59
603 查看
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;
}
看起来挺好容易的吧
经过自己验证过了,代码如下:
字符串去重方法:
采用正则
/**
* 字符串去重
* \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;
}
第一种:也是最笨的吧。
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;
}
看起来挺好容易的吧
经过自己验证过了,代码如下:
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; } //用法 var fruits = ['apple', 'orange', 'peach', 'apple', 'strawberry', 'orange', 'strawberry', 'orange']; var uniquefruits = removeDuplicates(fruits); 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;
}
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; } strUnique();
相关文章推荐
- commonJS — 数组操作(for Array)
- commonJS — 日期操作(for Date)
- JSONArray的应用
- Javascript做模糊查询
- JS控制图片显示的大小(图片等比例缩放)
- 最短路算法(Floyd、Dijsktra、Bellman-Ford、SPFA)
- 基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
- JSP -- EL表达式
- JavaScript中一个字符串变量突然变成了false的问题解析
- underscorejs-min学习
- underscorejs-max学习
- 理解javascript中的严格模式
- 解决JSP页面图片缓存问题
- 理解JAVASCRIPT 中hasOwnProperty()和isPrototypeOf的作用
- jsoup官网
- 浅析JavaScript作用域链、执行上下文与闭包
- [javascript]Three parts of javascript code snippet
- 模态窗口 - showModalDialog打开窗口中获取父窗口js方法
- js实现touch移动触屏滑动事件
- Angular.js(出库查看)