繁体   English   中英

使用javascript将大对象数组转换为小数组对象

[英]covert large array of objects into smaller array objects using javascript

我有一个来自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); 

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

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

像这样的东西:

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

或使用循环遍历数组

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

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

如果您使用的是JavaScript,但不熟悉lodashunderscore ,请这样做,因为这样可以节省大量时间。 使用可靠的代码是一个好主意。 额外的好处:如果您想了解专业人士如何做诸如uniq事情,您可以看一下源代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM