【问题标题】:How to add a set of object into a single array?如何将一组对象添加到单个数组中?
【发布时间】:2019-05-06 06:44:45
【问题描述】:

我正在插入具有相同主题和消息但收件人不同的电子邮件收件人列表。

我已经尝试过下面显示的一些方法,它获取要发送的收件人数量,但对于收件人来说,它只获取最后一个推送到数组中的收件人,这就是为什么它被发送给同一个收件人 3 次.

        var emailsObj = [];
        var addEmailObj = [], obj;
        for (i=0 ; i<rowData.length; i++) {
            addEmailObj["claimNo"] = $('#motorClaimNoInfo').val().trim().toUpperCase();
            addEmailObj["fileNo"] = $('#motorClaimNoInfo').attr('fileNo');
            addEmailObj["claimDate"] = $('#motorClaimNoInfo').attr('claimDate');
            addEmailObj["senderCd"] = $('#motorClaimFileComposeEmailFrom').attr('username');
            addEmailObj["sender"] = $('#motorClaimFileComposeEmailFrom').val();
            addEmailObj["senderEmail"] = $('#motorClaimFileComposeEmailFrom').attr('userEmail');
            addEmailObj["recipientCd"] = rowData[i].username;
            addEmailObj["recipient"] = rowData[i].userFullName;
            addEmailObj["recipientEmail"] = rowData[i].userEmail;
            addEmailObj["subject"] = $('#motorClaimFileComposeEmailSubj').val().trim().toUpperCase();
            addEmailObj["message"] = $('#motorClaimFileComposeEmailMsg').val().trim().toUpperCase();
            emailObj.push(addEmailObj[i]);
            emailsObj.push(rowData[i].username);
        }

Here's the console for this code
```[INFO ] 2019-05-06 14:25:37.766 [http-nio-8080-exec-10] MotorClaimInquiryController - emailObj {claimNo=100161002000351, fileNo=1, claimDate=11-21-2016, senderCd=MGSIMBIL, sender=MICHELLE G. SIMBILLO, senderEmail=MGSIMBILLO@MAPFREINSULAR.COM, recipientCd=ABSERNIO, recipient=SERNIO, ANNABEL BENAS, recipientEmail=ABSERNIO@MAPFREINSULAR.COM, subject=100161002000351-01, message=}
[INFO ] 2019-05-06 14:25:39.059 [http-nio-8080-exec-10] MotorClaimInquiryController - emailObj {claimNo=100161002000351, fileNo=1, claimDate=11-21-2016, senderCd=MGSIMBIL, sender=MICHELLE G. SIMBILLO, senderEmail=MGSIMBILLO@MAPFREINSULAR.COM, recipientCd=ABSERNIO, recipient=SERNIO, ANNABEL BENAS, recipientEmail=ABSERNIO@MAPFREINSULAR.COM, subject=100161002000351-01, message=}
[INFO ] 2019-05-06 14:25:40.578 [http-nio-8080-exec-10] MotorClaimInquiryController - emailObj {claimNo=100161002000351, fileNo=1, claimDate=11-21-2016, senderCd=MGSIMBIL, sender=MICHELLE G. SIMBILLO, senderEmail=MGSIMBILLO@MAPFREINSULAR.COM, recipientCd=ABSERNIO, recipient=SERNIO, ANNABEL BENAS, recipientEmail=ABSERNIO@MAPFREINSULAR.COM, subject=100161002000351-01, message=}

The result should have different recipients. Thanks

【问题讨论】:

  • 不应该addEmailObj 是对象{}
  • 您需要在每个循环中清空addEmailObj 。尝试在 for 循环中添加 addEmailObj = {}

标签: javascript jquery arrays object


【解决方案1】:

您只分配给addEmailObj 一次:

var addEmailObj = []

这意味着每次你改变或推送addEmailObj,你都在改变或推送同一个对象。而是在数组中创建它:

for (let i=0 ; i<rowData.length; i++) {
  const addEmailObj = {};

请注意,由于您没有将其用作数组,因此不应将其定义为数组 - 只需将其定义为普通对象,使用 {},而不是 []。 (另外,最好不要隐式创建全局变量 - 正确声明您的 i)如果可能,还使用 ​​ES6 语法(letconst)而不是 ES5 语法声明变量以避免可能出现的混淆来自var的吊装。 (var 有函数作用域,而不是块作用域)

【讨论】:

  • 但由于它不在函数中,var 会产生相同的输出 - 它应该是 let
  • 分配在循环内 - 它会正常工作。 jsfiddle.net/subp416h(不过,是的,如果可能,最好避免使用var
  • 那么这是否意味着在每次迭代结束时,它将被销毁/垃圾收集?
  • 因为创建的对象(使用varconst)被推送到数组,只要数组保持可见,它就不会被垃圾回收。但是,使用var 会使 last 创建的对象对整个函数可见,这可能是未来错误的潜在来源。如果var,在循环内重新分配addEmailObj不会破坏变量所引用的内容,它只会引用内存中的一个新对象(直到它再次被重新分配)
  • 好的,我现在明白了 - 谢谢!我仍在学习垃圾收集的技巧。
【解决方案2】:
               // let emailsObj = [];
            let addEmailObj = [];
            for (i=0 ; i<rowData.length; i++) {

    let new_user = {
        'claimNo':$('#motorClaimNoInfo').val().trim().toUpperCase(),
        'fileNo':$('#motorClaimNoInfo').attr('fileNo'),
        'claimDate':$('#motorClaimNoInfo').attr('claimDate'),
        'senderCd':$('#motorClaimFileComposeEmailFrom').attr('username'),
        'sender':$('#motorClaimFileComposeEmailFrom').val(),
        'senderEmail':$('#motorClaimFileComposeEmailFrom').attr('userEmail'),
        'recipientCd':rowData[i].username,
        'recipient':rowData[i].userFullName,
        'recipientEmail':rowData[i].userEmail,
        'subject':$('#motorClaimFileComposeEmailSubj').val().trim().toUpperCase(),
        'message':$('#motorClaimFileComposeEmailMsg').val().trim().toUpperCase()

    };
                addEmailObj.push(new_user);
                // emailsObj.push(rowData[i].username);
            }**

>

【讨论】:

    猜你喜欢
    • 2019-01-25
    • 2013-01-24
    • 1970-01-01
    • 2020-02-22
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多