【问题标题】:Nested loop returns last 2 values嵌套循环返回最后 2 个值
【发布时间】:2021-02-07 15:35:04
【问题描述】:

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

这是我的数组:

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; 
}

【问题讨论】:

  • let messageToSend = this.extractMessageDetails(this.ContactList[i], this.itemList[j]); 在每个循环中都会被覆盖。改用地图加连接
  • 投票以关闭为 不可重现或由错字引起虽然类似的问题可能是这里的主题,但这个问题的解决方式不太可能帮助未来的读者。
  • 您的代码什么都不做,您可能会创建要在循环中发送的项目,但您没有对它做任何事情,它在退出循环范围时被删除,尝试将结果附加到某个数组或其他东西。
  • 好的,所以直接调用你的数组而不是使用这个。 ,希望你能明白,因为它不是一个类,所以直接调用数组而不加上 this 是一种改进,逻辑似乎很好,但你缺少添加另一个数组以进行更多说明,比如你在哪里提到联系人 ID 和您的联系人 JSON 在哪里?并取出结果,否则它只会给你最后一个结果。

标签: javascript angular


【解决方案1】:

在第二个循环之外创建一个数组 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]
  }

如果您想收集所有合约的所有消息,请将数组声明移到循环之外

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多