【问题标题】:Foreach over object in AngularForeach 在 Angular 中的对象
【发布时间】:2019-01-09 10:25:29
【问题描述】:

我的代码有点问题。我已经有一段代码在数组上循环(像这样:) 我把这个数组变成这样:

这是一段代码:

processPostData(data: any) {
    Array.prototype.forEach.call(data.resources, (element: any) => {
        console.log(element);
        Object.keys(element).forEach((key) => {
            console.log(key);
            if ((element[key] == null || element[key] == '') && ['process_limit_date', 'creation_date', 'closing_date', 'countAttachments', 'countNotes'].indexOf(key) === -1) {
                element[key] = this.lang.undefined;
            } else if (["senders","recipients"].indexOf(key) > 0) {
                if (element[key].length > 1) {
                    console.log(element[key]);
                    element[key] = this.lang.isMulticontact;
                } else {
                    element[key] = element[key][0];
                }
            } else if (key == 'status_icon' && element[key] == null) {
                element[key] = 'fa-question undefined';
            }

        });
    });

    return data;
}

现在的问题是我修改了我的输入“数据”,现在我有了一个对象,如下所示: pic3

我现在有一个对象而不是一个数组,而且我以前没有设法以同样的方式循环它。我怎么能那样做?至少,对于第一个循环,并获得一个 Array 或一个 Object,其中包含 Object 的“23”和“24”索引的内容。

如果我不够清楚,请告诉我,我很难做到尽可能准确

【问题讨论】:

  • 图片没有帮助,您需要添加数据并尝试创建演示。
  • 我在哪里可以做演示?
  • 编辑您的问题并尝试创建 sn-p。
  • 为什么不能以编程方式解析数据(手动转换对象)然后迭代?究竟是什么问题,您不知道您将收到什么格式,或者您不知道如何组合“23”和“24”?

标签: javascript angular typescript foreach angular7


【解决方案1】:

我不确定我是否理解正确,但你可以像这样迭代对象:

for(let key in object) {
let child = object[key];
// Your Code
}

【讨论】:

    【解决方案2】:

    默认情况下,对象字段不能以数组方式迭代。但是,您可以尝试将处理程序包装在以下内容中,以便能够解析数组和对象形式:

    if(Array.isArray(input)) {
      /* Do what you are already doing */
    } else { /* We are working with object */
      Object.keys(input).forEach((key) => {
        /* Here you can iterate over each key in object */
      })
    }
    

    但是,您的问题范围仍然不清楚

    【讨论】:

      【解决方案3】:

      请注意,我注意到您将 resource.sendersresource.recipients 视为数组,而在您的屏幕截图中它是一个字符串。
      我还注意到,如果您有多个发件人/收件人,您会将this.lang.isMulticontact 分配给 resource.senders/recipient,因此您将不再拥有您的发件人/收件人,这是您想要的吗?

      请注意,您不应修改数据参数,否则会导致不良副作用。

      processPostData(data) {
        const dataToProcess = [...data];
        dataToProcess.resources.forEach((resource) => {
          const propertiesUndefined = ['process_limit_date', 'creation_date', 'closing_date', 'countAttachments', 'countNotes'];
          propertiesUndefined.forEach((property) => {
            if (!resource[property]) { 
              resource[property] = this.lang.undefined;
            }
          });
          const propertiesMultiContact = ['senders', 'recipients'];
          propertiesMultiContact.forEach((property) => {
            if (resource[property] instance of Array && resource[property].length > 1) {
              resource[property] = this.lang.isMulticontact;
            }
          });
         if (!resource['status_icon']) {
           resource['status_icon'] = 'fa-question undefined';
         }
        });
        return dataToProcess;
      }
      

      【讨论】:

        【解决方案4】:

        在您迭代之前data.resources 随着您的更改,您必须遍历data.resources.docs 试试这样的:

        data.resources.forEach(resource => {
            console.log(resource);
            resource.docs.forEach(doc => {
                console.log(doc);
                // ...
            }
        });
        

        【讨论】:

          猜你喜欢
          • 2015-10-11
          • 2014-07-11
          • 1970-01-01
          • 2017-02-07
          • 1970-01-01
          • 2015-07-02
          • 1970-01-01
          • 2017-07-30
          • 2014-10-12
          相关资源
          最近更新 更多