var list = [
"john@yahoo.com", "rami@gmail.com",
"josh@yahoo.com", "bale@gmail.com"
];
obj = {};
list.map(x => x.split('@')[1]).forEach(x => obj[x] = [])
list.forEach(email => obj[email.split('@')[1]].push(email))
console.log(obj)
/*
{
"yahoo.com": [
"john@yahoo.com",
"josh@yahoo.com"
],
"gmail.com": [
"rami@gmail.com",
"bale@gmail.com"
]
}
*/
Объяснение : создан пустой объект obj
.Затем я повторил на list
и извлек все домены на list.map(x => x.split('@')[1])
.
Имея домены в руках, я настроил объект так, чтобы он имел структуру { 'yahoo.com': [], 'gmail.com': [] }
Затем я снова повторил список и добавил электронное письмо, если домен содержал соответствующую часть, давая результирующий объект.
Редактировать : Это также можно сделать за одну итерацию следующим образом:
var list = [
"john@yahoo.com", "rami@gmail.com",
"josh@yahoo.com", "bale@gmail.com"
]
obj = {}
list.forEach(email => {
let domain = email.split('@')[1]
if (!obj[domain]) obj[domain] = []
if (obj[domain].indexOf(email) < 0) obj[domain].push(email)
})
console.log(obj)
Здесь я перебираю список, извлекаю домен, устанавливаю ключ с []
, если его не существует, и затем помещаю в него электронное письмо.Это также гарантирует, что дубликаты электронных писем не будут отправлены.