【问题标题】:How do you push child elements of an object into an array?如何将对象的子元素推送到数组中?
【发布时间】:2018-12-24 12:35:00
【问题描述】:

我有一个来自 Google People API 的承诺,我想根据部分数据创建一个数组。我不知道如何在数组中创建子元素。

let arr = new Array();

for (var a = 0; a < obj.length; a++) {
    arr.push(obj[a].requestedResourceName);
    for (var b = 0; b < obj[a].person.names.length; b++) {
        if (obj[a].person.names[b].metadata.source.type === 'CONTACT') {
            arr[a].push(obj[a].person.names[b]);
        }
    }
}

错误是:Error: Uncaught (in promise): TypeError: arr[a].push is not a function

【问题讨论】:

  • 控制台日志arr[a]
  • 发布 k4kItems 数组值。

标签: angular typescript


【解决方案1】:

当您执行arr.push(this.k4kItems[a].requestedResourceName) 时,您正在向arr[a] 添加不是数组的内容。

一个建议是添加一个包含子属性的对象

let arr = new Array();

for (var a = 0; a < this.k4kItems.length; a++) {
  // Adding object with children array
  arr.push({item: this.k4kItems[a].requestedResourceName, children: []});
  for (var b = 0; b < this.k4kItems[a].person.names.length; b++) {
    if (this.k4kItems[a].person.names[b].metadata.source.type === "CONTACT") { 
      // Pushing to that array, notice we use .children to push child items
      arr[a].children.push(this.k4kItems[a].person.names[b]);
    }
  }
}

这是使用map 和filter 做同样事情的更现代和优雅的方式

const arr = this.k4kItems.map(item => ({
    item,
    children: item.person.names.filter(
       name => name.metadata.source.type === "CONTACT"
    )
}))

【讨论】:

  • 感谢@Juan Mendes。我现在遇到了另一个问题。您的代码在姓名和电子邮件上效果很好,但是当我尝试添加相同结构的性别时,我得到一个未定义的错误。
  • const arr = this.k4kItems.map(item => ({ resource_LBL: item.person.resourceName, names_lbl: item.person.names.filter( name_PARM => name_PARM.metadata.source.type === "CONTACT"), email_LBL: item.person.emailAddresses.filter(email_PARM => email_PARM.metadata.source.type === "CONTACT"), gender_LBL: item.person.genders.filter(gender_PARM => gender_PARM .metadata.source.type === "CONTACT" ) }))
  • 呃。我上面的评论效果不佳。 Stack Overflow 上的正确处理方法是什么?他回答了我的问题,但我没有关于答案的新问题。将其标记为已回答并提出新问题或继续评论答案是否正确?
  • 我在stackoverflow.com/questions/53916498/…添加了一个新问题
  • 是的,所以每个问题都应该是一个单独的问题,因此对其他人最有帮助
【解决方案2】:

您必须确保将 arrays 推送到 arr 数组中,这意味着如果 this.k4kItems[a].requestedResourceName 不是数组,则会出现该错误。

【讨论】:

    猜你喜欢
    • 2020-07-14
    • 2020-07-08
    • 2022-01-23
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 2021-06-27
    • 1970-01-01
    相关资源
    最近更新 更多