使用 javascript 遍历对象数组
Iterate through array of objects using javascript
我正在尝试遍历对象数组,但不知何故没有正确完成。有人可以让我知道我哪里错了吗。
这是数据
const response = {
"pass": 1,
"fail": 2,
"projects_all": [
{
"projects": [
{
"name": "Project1",
"current": null,
"previous": {
"environment": "qa4nc",
"status": "UNKNOWN",
}
}
]
},
{
"projects": [
{
"name": "Project2",
"current": null,
"previous": {
"environment": "qa4nc",
"status": "FAIL",
}
},
{
"name": "Project3",
"status": "LIVE",
"current": null,
"previous": {
"environment": "qa4nc",
"status": "UNKNOWN",
}
}
]
}
]
}
这是我试过的代码
if(response) {
response?.projects_all?.forEach((projects) => {
projects.forEach(project) => {
if(project.previous !== null) {
//do something here
}
});
});
}
我正在尝试遍历这个对象数组,但它说项目不可迭代。感谢任何帮助,让我明白我哪里出错了。
您没有正确地迭代数组。一个好主意是格式化您计划迭代的 JSON 对象。这样你就可以看到数组和对象是什么,在什么层级。
if (response) {
response?.projects_all?.forEach((project) => {
project?.projects?.forEach((project) => {
console.log(project?.name);
});
}
);
}
response?.projects_all?.forEach((projects) => {
这是开始代码的正确方式。接下来发生的问题是您显然误解了 projects
在以下上下文中的含义
你做 projects.forEach(project)
就好像你认为 projects
是数组一样。 projects
此时不是数组,它是一个对象,如下所示:
{
"projects": [
{
"name": "Project1",
"current": null,
"previous": {
"environment": "qa4nc",
"status": "UNKNOWN",
}
}
]
}
所以我实际上想做 projects.projects.forEach(project => { ... })
,或者您可以将变量名称从 projects
更改为更便于阅读。
首先,确定您的响应对象当前的形状。
通过使用 ?.
运算符,您的 JS 内置错误报告。
根据上下文,我假设您的回复实际上是这样的:
console.log(response);
{
data: {
projects_all: [ ... ]
}
}
因此,您使用 response?.projects_all
的现有代码实际上并未命中您的响应中的 projects_all
属性。
你可以尝试以下方法吗:
response.data.projects_all.forEach((project) => {
console.info("Project: ", project);
project.projects.forEach((project) => {
console.log(project, project?.name);
});
});
或者,如果您的响应对象中没有 data
键,您可以在循环中省略它:
response.data.projects_all.forEach((project) => {
console.info("Project: ", project);
project.projects.forEach((project) => {
console.log(project, project?.name);
});
});
我正在尝试遍历对象数组,但不知何故没有正确完成。有人可以让我知道我哪里错了吗。
这是数据
const response = {
"pass": 1,
"fail": 2,
"projects_all": [
{
"projects": [
{
"name": "Project1",
"current": null,
"previous": {
"environment": "qa4nc",
"status": "UNKNOWN",
}
}
]
},
{
"projects": [
{
"name": "Project2",
"current": null,
"previous": {
"environment": "qa4nc",
"status": "FAIL",
}
},
{
"name": "Project3",
"status": "LIVE",
"current": null,
"previous": {
"environment": "qa4nc",
"status": "UNKNOWN",
}
}
]
}
]
}
这是我试过的代码
if(response) {
response?.projects_all?.forEach((projects) => {
projects.forEach(project) => {
if(project.previous !== null) {
//do something here
}
});
});
}
我正在尝试遍历这个对象数组,但它说项目不可迭代。感谢任何帮助,让我明白我哪里出错了。
您没有正确地迭代数组。一个好主意是格式化您计划迭代的 JSON 对象。这样你就可以看到数组和对象是什么,在什么层级。
if (response) {
response?.projects_all?.forEach((project) => {
project?.projects?.forEach((project) => {
console.log(project?.name);
});
}
);
}
response?.projects_all?.forEach((projects) => {
这是开始代码的正确方式。接下来发生的问题是您显然误解了 projects
在以下上下文中的含义
你做 projects.forEach(project)
就好像你认为 projects
是数组一样。 projects
此时不是数组,它是一个对象,如下所示:
{
"projects": [
{
"name": "Project1",
"current": null,
"previous": {
"environment": "qa4nc",
"status": "UNKNOWN",
}
}
]
}
所以我实际上想做 projects.projects.forEach(project => { ... })
,或者您可以将变量名称从 projects
更改为更便于阅读。
首先,确定您的响应对象当前的形状。
通过使用 ?.
运算符,您的 JS 内置错误报告。
根据上下文,我假设您的回复实际上是这样的:
console.log(response);
{
data: {
projects_all: [ ... ]
}
}
因此,您使用 response?.projects_all
的现有代码实际上并未命中您的响应中的 projects_all
属性。
你可以尝试以下方法吗:
response.data.projects_all.forEach((project) => {
console.info("Project: ", project);
project.projects.forEach((project) => {
console.log(project, project?.name);
});
});
或者,如果您的响应对象中没有 data
键,您可以在循环中省略它:
response.data.projects_all.forEach((project) => {
console.info("Project: ", project);
project.projects.forEach((project) => {
console.log(project, project?.name);
});
});