2013-09-20 2 views
0

У меня есть список значений, подобных этому из базы данных sql.скрытый большой массив объектов в объекты меньшего массива с использованием javascript

UserName Email     ComputerName  DateIssued 
jjsmith [email protected] JTComputer  9/14/2013 
ltjoseph [email protected] LTComputer1  10/21/2013 
KTsmith [email protected] KTComputer1  01/25/2012 
ltjoseph [email protected] LTComputer2  01/11/2013 
KTsmith [email protected] KTComputer2  01/25/2012 

Я преобразовываю свой список в массив объектов.

var user_array = [ 
{"username":"jjsmith", "email":"[email protected]", "computerName":"JTComputer", "dateissued":"10/21/2013"} 
{"username":"ltjoseph", "email":"[email protected]", "computerName":"LTComputer1", "dateissued":"10/21/2013"} 
{"username":"KTsmith", "email":"[email protected]", "computerName":"KTComputer1", "dateissued":"01/25/2012"} 
{"username":"ltjoseph", "email":"[email protected]", "computerName":"LTComputer2", "dateissued":"01/11/2013"} 
{"username":"KTsmith", "email":"[email protected]", "computerName":"KTComputer2", "dateissued":"01/25/2012"}] 

функция была создана кем-то другим, что отправляет электронные письма пользователей, он принимает только два параметра, которые являются строками. Таким образом, я не хочу отправлять более 1 электронной почты для каждого пользователя. Поэтому я пытаюсь понять, как объединить элементы вместе, чтобы мой пример набора строк выглядел так.

var str1 = "[email protected]"; 
var str2 = "ltjoseph, LTComputer1-10/21/2013, LTComputer2-01/11/2013"; 

, а затем запустить другую функцию пользователя для отправки электронных писем для каждого из элементов в списке.

function sendEmails(str1, str2); 

Если у кого-то есть идеи, как я могу это сделать. Пожалуйста, посоветуйте ..

+1

отправить полный метод sendEmails ... – shennan

+0

Значит, вам очень нужна «GROUP BY» email/name и агрегировать все имена компьютеров? Метод @shennan здесь неактуальен –

+0

@shennan У меня нет доступа к этому методу, все, что я знаю, это то, что он принимает. – user990951

ответ

1
var by_user = {}; 
for (var i = 0; i < user_array.length; i++) { 
    if (by_user[user_array[i].username]) { 
     // Found user, add another computer 
     by_user[user_array[i].username].str2 += ', ' + user_array[i].computerName + '-' + user_array[i].dateissued; 
    } else { 
     // First entry for user, create initial object 
     by_user[user_array[i].username] = { 
      str1: user_array[i].email, 
      str2: user_array[i].username + ', ' + user_array[i].computerName + '-' + user_array[i].dateissued 
     }; 
    } 
} 

Теперь у вас есть by_user объект, который имеет один вспомогательный объект для каждый пользователь, свойства str1 и str2 - это переменные, которые вы хотите.

by_user['ltjoseph'].str1 => [email protected] 
by_user['ltjoseph'].str2 => ltjoseph, LTComputer1-10/21/2013, LTComputer2-01/11/2013 
+0

. Я попытался реализовать код, прежде всего, что каждый элемент указан только в str1 и st2, как он фактически определяет, существует ли пользователь? Потому что by_user [array [i] .username] никогда не возвращается. – user990951

+0

Исправлены некоторые ошибки в коде, я думаю, теперь он должен работать. – Barmar

+0

@Barmar ... Я думал получить доступ к объекту, который мне нужно было сделать, это by_user [user_array [i]]. Str1 или by_user [user_array [i]]. Str2, но он возвращается неопределенно. – user990951

0

что-то вроде этого:

var str1=array[0].email 
var str2=array[0].username+", "+array[0].computerName+array[0].dateissued 

или использовать цикл и перебирать массив

0

Я настоятельно рекомендую принести в библиотеку как lodash для такого рода вещи, и с помощью uniq (образец здесь: http://jsfiddle.net/MwYtU/):

var uniqs = lodash(user_array).pluck('email').uniq().value(); 

Если вы делаете яваскрипт и не знакомы с lodash или underscore, сделайте это, потому что это сэкономит вам много времени. Использование проверенного и достоверного кода - хорошая идея. Добавленный бонус: если вы хотите увидеть, как профи делают что-то вроде uniq, вы можете просто посмотреть исходный код.

Смежные вопросы