0

我有一个 javascript 变量,它存储用户在界面中插入的电子邮件 ID。

var contacts="test121@example.com,lisd.lia@example.com,hunshua@example.net,test121@example.com"

此变量中存储了重复的电子邮件 ID。如何删除重复项并存储每个变量的单次出现?

4

4 回答 4

2

如果您使用的是下划线lodash,那么:

contacts = _.unique(contacts.split(',')).join(',');

如果没有,请执行以下操作:

var emails = contacts.split(',');
    seenEmails = {},
    newContacts = [];

for(var i = 0; i < emails.length; i++) {
  if(!seenEmails[emails[i]]) {
    seenEmails[emails[i]] = true;
    newContacts.push(emails[i]);
  }
}

contacts = newContacts.join(',');

这适用于所有没有库的浏览器,并且比indexOf.

于 2013-08-01T06:35:21.520 回答
1

这是删除重复字符串的简单示例。

var str1 = "saas,asaac,saas,sss,sss,fds";
var characters = str1.split(",");
var distinctCharacters = [];
jQuery.each(characters, function(index, c) {
if (jQuery.inArray(c, distinctCharacters) > -1) {
        // do nothing
        alert("already exists " + c);
    } else {
        distinctCharacters.push(c);
    }
});
alert(distinctCharacters);​
于 2013-08-01T06:37:38.337 回答
1

这是一种你永远不应该在生产中使用或使用大量列表的蛮力方式,但可以在不使用任何库的纯 JS 中完成工作:

var contacts = "test121@example.com,lisd.lia@example.com,hunshua@example.net,test121@example.com";

function uniqueContacts(str){
    var contactList = str.split(',');
    var newContacts = [];
    for(var i = 0; i < contactList.length; i++){
        if(newContacts.indexOf(contactList[i]) === -1)
            newContacts.push(contactList[i]);
    }
    return newContacts;
}

uniqueContacts(contacts);

注意: IE 8 或更早版本不支持数组的 indexOf() 方法。如果这是你需要支持的东西,它仍然可以完成,只是不同。(有关示例,请参见贾斯汀的回答)

我给的函数会返回一个数组;从那里你可以对数据做你喜欢的事情,包括使用uniqueContacts(contacts).join(',')

还值得一提的是,如果您只针对支持 ECMAScript 5 的浏览器,您可以使用Object.keys()并避免使用 indexOf() 方法在循环访问每个地址时存储两次。但是,对该方法的支持很少,因此不可取。

于 2013-08-01T06:43:04.473 回答
0

这就是我解决它的方法......

//filter out repeated email ids
if (contacts != "") {
var t = contacts.split(',');
$.unique(t);
contacts=t.join(",");
}
于 2013-08-01T07:47:55.303 回答