0

我有一个来自 sql 数据库的这样的值列表。

UserName  Email                  ComputerName      DateIssued
jjsmith   jjsmith@example.com    JTComputer        9/14/2013
ltjoseph  ltjoseph@example.com   LTComputer1       10/21/2013
KTsmith   KevinTem@example.com   KTComputer1       01/25/2012
ltjoseph  ltjoseph@example.com   LTComputer2       01/11/2013
KTsmith   KevinTem@example.com   KTComputer2       01/25/2012

我将列表转换为对象数组。

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

其他人创建了一个向用户发送电子邮件的函数,它只接受两个字符串参数。所以我不想为每个用户发送超过 1 封电子邮件。所以我试图弄清楚如何将这些项目组合在一起,以便我的一组示例字符串看起来像这样。

var str1 = "ltjoseph@example.com";
var str2 = "ltjoseph, LTComputer1-10/21/2013, LTComputer2-01/11/2013";

然后触发另一个用户函数为列表中的每个项目发送电子邮件。

 function sendEmails(str1, str2); 

如果有人有任何想法我该怎么做。请指教..

4

3 回答 3

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对象,它为每个用户提供了一个子对象,其str1str2属性是您想要的变量。

by_user['ltjoseph'].str1 => ltjoseph@example.com
by_user['ltjoseph'].str2 => ltjoseph, LTComputer1-10/21/2013, LTComputer2-01/11/2013
于 2013-09-20T18:41:16.587 回答
0

像这样的东西:

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

或使用循环并遍历数组

于 2013-09-20T18:37:48.903 回答
0

我强烈建议为这类事情引入像 lodash 这样的库并使用uniq(示例:http: //jsfiddle.net/MwYtU/):

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

如果您正在使用 javascript 并且不熟悉lodashor underscore,请这样做,因为它会为您节省大量时间。使用经过验证的真实代码是个好主意。额外的好处:如果你想看看专业人士是如何做的,uniq你可以看看源代码。

于 2013-09-20T21:05:21.007 回答