Удаление повторяющихся имейлов из строки
все привет. Есть строка имейлов с разделителем пробел :
email1@email.com email1@email.com email2@email.com email1@email.com Строка может быть достаточно длинной(скажем 5-10К имейлов). Есть ли способ более быстрый чем этот : var arr = emails.split(" "); var res = new array(); for(var i=0; i<arr.length; i++) { for(var j=0; j<arr.length; j++) { if(arr[i] == arr[j]) удаляю повторение из массива } } Вроде как есть способ решить задачу через replace, но я в регулярках совсем новичек и подобную регулярку буду составлять целый день, если вообще составлю. Спасибо. |
Требует поддержки ES5:
var arr = [1,2,5,1,2,5,6,7,2]; var uniqued = arr.filter(function(e,i,a){return i == a.indexOf(e)}); alert( uniqued ); |
спасибо, вроде работает
|
Esigns,
исполнение RegExp по заявке ))) <script type="text/javascript"> var str = "email5@email.com email1@email.com email2@email.com email1@email.com email2@email.com email3@email.com email1@email.com email1@email.com email2@email.com email1@email.com email2@email.com email3@email.com email5@email.com"; myRe = /(\S+@\S+)(?![\s\S]+?\1)/gm; alert(str.match(myRe).join("\n")); </script> |
хмм к адресам добавились теги но вроде работает.
|
рони,
Да, к емейлам добавляются в JS тегах Нун делать в [HTML] <script type="text/javascript"> var str = 'email1@email.com email1@email.com email2@email.com email1@email.com'; eval('var obj = {'+ (' '+str+' ').replace(/\s+/g,'\":1,\"').replace(/^":1,|,"$/g,'')+'}'); var arr=[];for(var i in obj) {arr.push(i);} alert(arr) </script> |
Deff,
вам только шифровки писать! |
Цитата:
for(var j=0; j<arr.length; j++) заменить на for(var j=i+1; j<arr.length; j++) Предлагаю свои два варианта: 1. var res = emails.split( " " ); var tmp = {}; var i = 0; while( i < res.length ) { var tmp2 = res[i].toUpperCase(); if( tmp2 in tmp ) res.splice( i, 1 ); else { tmp[tmp2] = 1; ++i; } } 2. var res = emails.split( " " ); res.sort( function(a,b) { a=a.toUpperCase(); b=b.toUpperCase(); return a>b?1:a<b?-1:0; } ); var i = 1; while( i < res.length ) { if( res[i-1].toUpperCase() == res[i].toUpperCase() ) res.splice( i, 1 ); else ++i; } (сорри за вложенный условный оператор :) ) Второй вариант нарушает исходный порядок, но это можно легко исправить, если нужно. |
Часовой пояс GMT +3, время: 03:00. |