我有一个 javascript 变量,它存储用户在界面中插入的电子邮件 ID。
var contacts="test121@example.com,lisd.lia@example.com,hunshua@example.net,test121@example.com"
此变量中存储了重复的电子邮件 ID。如何删除重复项并存储每个变量的单次出现?
我有一个 javascript 变量,它存储用户在界面中插入的电子邮件 ID。
var contacts="test121@example.com,lisd.lia@example.com,hunshua@example.net,test121@example.com"
此变量中存储了重复的电子邮件 ID。如何删除重复项并存储每个变量的单次出现?
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() 方法。如果这是你需要支持的东西,它仍然可以完成,只是不同。(有关示例,请参见贾斯汀的回答)
我给的函数会返回一个数组;从那里你可以对数据做你喜欢的事情,包括使用uniqueContacts(contacts).join(',')
还值得一提的是,如果您只针对支持 ECMAScript 5 的浏览器,您可以使用Object.keys()
并避免使用 indexOf() 方法或在循环访问每个地址时存储两次。但是,对该方法的支持很少,因此不可取。
这就是我解决它的方法......
//filter out repeated email ids
if (contacts != "") {
var t = contacts.split(',');
$.unique(t);
contacts=t.join(",");
}