删除javascript变量中以逗号分隔格式存储的重复电子邮件ID

Remove duplicate email IDs stored in comma separated format in javascript variable

本文关键字:存储 ID 电子邮件 格式 分隔 变量 javascript 删除      更新时间:2023-09-26

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

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

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

如果使用下划线或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更高效。

这里有一个删除重复字符串的简单示例。

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);​

这里有一种暴力的方法,你永远不应该在生产中或大列表中使用,但可以在纯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()方法。如果这是你需要支持的东西,它仍然可以做,只是不同。(见Justin的回答示例)

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

还值得一提的是,如果您只针对支持ECMAScript 5的浏览器,则可以使用Object.keys(),并避免使用indexOf()方法在循环浏览时将每个地址存储两次。然而,对这种方法的支持度很低,所以这是不可取的。

这就是我解决问题的方法…

//filter out repeated email ids
if (contacts != "") {
var t = contacts.split(',');
$.unique(t);
contacts=t.join(",");
}