嵌套循环返回最后 2 个值

时间:2021-02-07 15:35:04

标签: javascript angular

我正在尝试向我的联系人列表中的多个联系人发送多个项目,我使用嵌套循环但它只发送每个联系人的最后一个项目而忽略其余项目, 我不知道我做错了什么。

这是我的数组:

ContactList = ['john','jem'];

itemList = [
    {
        "ItemTo": 'jhon@gmail.com',
        "ItemType": 'type1'
    },

    {
        "ItemTo": 'jem@gmail.com',
        "ItemType": 'type2'
    }
]

这是我的 JS 代码:

onClick() {
    for (let i = 0; i < this.ContactList.length; i++) {
        for (let j=0; j<this.itemList; j++){
            let messageToSend = this.extractMessageDetails(
                this.ContactList[i], 
                this.itemList[j]
            );
        }
    }
} 

extractMessageDetails(contact, item) {

    const ItemTo = contact.contactId;
    const ItemType = item.type;

    const itemToSend  = {
        "ItemTo": ItemTo,
        "ItemType": ItemType
    }
    
    return itemToSend; 
}

2 个答案:

答案 0 :(得分:0)

我认为在您的代码中,由于在每个循环中都会调用该函数,因此每次迭代都会覆盖变量 messagetosend,因此仅存储最后一个实例。尝试将它们存储在另一个数组而不是单个变量中。

答案 1 :(得分:0)

在第二个循环外创建一个数组 messagesToSend = [] 然后在第二个循环内将您的对象推送到变量 messagesToSend.push(this.extractMessageDetails(this.ContactList[i], this.itemList[j]);) ;.因此,在第二个循环结束时,您将收到每个联系人的消息

for (let i = 0; i < this.ContactList.length; i++) {
    let messagesToSend = [];
    for (let j = 0; j < this.itemList; j++) {
      messagesToSend.push( 
        this.extractMessageDetails(this.ContactList[i], this.itemList[j]););
    }
    ///send messages to contract[i]
  }

如果要收集所有合约的所有消息,请在循环外移动数组声明