我从Google People API获得了一个承诺,我想根据部分数据创建一个数组。我不知道如何在数组中制作子元素。
我已经阅读了所有可以找到的文章,但是其中大多数都引用了DOM元素,并且我正在Angular中进行构建。我敢肯定这很简单,但是我找不到能帮助我的例子。
let arr = new Array();
for (var a = 0; a < this.k4kItems.length; a++) {
arr.push(this.k4kItems[a].requestedResourceName);
for (var b = 0; b < this.k4kItems[a].person.names.length; b++) {
if (this.k4kItems[a].person.names[b].metadata.source.type === "CONTACT") {
arr[a].push(this.k4kItems[a].person.names[b]);
}
}
}
console.log(arr);
Angular编译它没有任何错误,但是控制台日志提供以下内容:错误:未捕获(承诺):TypeError:arr [a] .push不是函数 TypeError:arr [a] .push不是函数
答案 0 :(得分:3)
执行arr[a]
时,您正在向arr.push(this.k4kItems[a].requestedResourceName)
添加不是数组的内容。
一个建议是添加一个包含children属性的对象
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"
)
}))
答案 1 :(得分:0)
您必须确保在arr
数组中推送数组,这意味着如果this.k4kItems[a].requestedResourceName
不是数组,则会出现该错误。