在Angular中遍历对象

时间:2019-01-09 10:25:29

标签: javascript angular typescript foreach angular7

我的代码有一些问题。我已经在数组上循环了一段代码(像这样:pic1) 我将数组变成这样:pic2

这是一段代码:

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

我现在有了一个Object而不是一个Array,我没有设法像以前那样遍历它。我该怎么办?至少在第一个循环中,获得具有对象的“ 23”和“ 24”索引的内容的数组或对象。

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

4 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解您,但是您可以遍历这样的对象:

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

答案 1 :(得分:0)

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

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 */
  })
}

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

答案 2 :(得分:0)

在遍历data.resources之前 进行更改后,您必须遍历data.resources.docs 尝试类似的事情:

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

答案 3 :(得分:0)

请注意,我注意到您将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;
}