Javascript 从数组中检索值的更简单方法

Javascript 从数组中检索值的更简单方法,javascript,postman,Javascript,Postman,有没有比在我的代码中使用for循环更简单的方法来检索JSON响应中的值“TestProject” [ { "Id": "9ac44c1d-0066-47aa-a2a2-a9b90109b0a5", "Group": null, "DataFields": [ { "Header": "ProjectID", "Value": "TestProject"

有没有比在我的代码中使用for循环更简单的方法来检索JSON响应中的值
“TestProject”

[
    {
        "Id": "9ac44c1d-0066-47aa-a2a2-a9b90109b0a5",
        "Group": null,
        "DataFields": [
            {
                "Header": "ProjectID",
                "Value": "TestProject"
            },
            {
                "Header": "uui_ConfigPack",
                "Value": "75e8ce5a-7ae0-41ca-86f0-aca1e7158073"
            }
        ],
        "HasDocuments": null
    }
]
var projResults=JSON.parse(responseBody);
var projNumber=1;
dataProjectId=projResults[projNumber].Id;
projName='未找到';
对于(i=0;i
看起来您正试图在数组中查找对象,最常用的方法是
array.prototype.find

var projResults=[
{
“Id”:“9ac44c1d-0066-47aa-a2a2-a9b90109b0a5”,
“组”:空,
“数据字段”:[
{
“Header”:“ProjectID”,
“值”:“TestProject”
},
{
“标题”:“uui\U配置包”,
“值”:“75e8ce5a-7ae0-41ca-86f0-aca1e7158073”
}
],
“HasDocuments”:空
}
];
var projNumber=0;
const foundObj=projResults[projNumber].DataFields.find(({Header})=>Header=='ProjectID');
const projName=foundObj?foundObj.Value:'未找到';

console.log(projName)
看起来您正在尝试在数组中查找对象,最常用的方法是
array.prototype.find

var projResults=[
{
“Id”:“9ac44c1d-0066-47aa-a2a2-a9b90109b0a5”,
“组”:空,
“数据字段”:[
{
“Header”:“ProjectID”,
“值”:“TestProject”
},
{
“标题”:“uui\U配置包”,
“值”:“75e8ce5a-7ae0-41ca-86f0-aca1e7158073”
}
],
“HasDocuments”:空
}
];
var projNumber=0;
const foundObj=projResults[projNumber].DataFields.find(({Header})=>Header=='ProjectID');
const projName=foundObj?foundObj.Value:'未找到';

console.log(projName)我建议您阅读以下数组方法:

  • 地图
  • 滤器
  • 减少 ... 这些函数将帮助您以高效的方式管理阵列,它将使您的代码看起来更干净、更易于阅读,您将在此处找到有关它的更多信息:


我建议使用wesbos的“javascript 30”,他有一段精彩的视频:)

我建议阅读数组方法,如:

  • 地图
  • 滤器
  • 减少 ... 这些函数将帮助您以高效的方式管理阵列,它将使您的代码看起来更干净、更易于阅读,您将在此处找到有关它的更多信息:


我建议使用wesbos的“javascript 30”,他有一段精彩的视频:)

你可以使用更高阶的函数,比如
map
过滤器
减少
等等。
为了避免循环

这是一条1号班轮:

var obj=[
{
“Id”:“9ac44c1d-0066-47aa-a2a2-a9b90109b0a5”,
“组”:空,
“数据字段”:[
{
“Header”:“ProjectID”,
“值”:“TestProject”
},
{
“标题”:“uui\U配置包”,
“值”:“75e8ce5a-7ae0-41ca-86f0-aca1e7158073”
}
],
“HasDocuments”:空
}
]

log(obj.map(i=>i.DataFields).flat(1).find(i=>i.Header==='ProjectID').Value)
您可以使用更高阶的函数,如
map
filter
reduce
等。 为了避免循环

这是一条1号班轮:

var obj=[
{
“Id”:“9ac44c1d-0066-47aa-a2a2-a9b90109b0a5”,
“组”:空,
“数据字段”:[
{
“Header”:“ProjectID”,
“值”:“TestProject”
},
{
“标题”:“uui\U配置包”,
“值”:“75e8ce5a-7ae0-41ca-86f0-aca1e7158073”
}
],
“HasDocuments”:空
}
]

log(obj.map(i=>i.DataFields).flat(1).find(i=>i.Header==='ProjectID').Value)不,没有更简单的方法。如果您需要重复该逻辑,某些库或帮助函数可以帮助您,但基本上所有这些都将在整个过程中使用某种形式的迭代array@vlaz是的,有,
find
方法。@SamiHult是数组上的某种迭代,但更简单:)此外,一旦找到匹配项,它将停止,原始代码没有。尽管如此,就复杂性而言,它基本上是一个
O(n)
操作不,没有更简单的方法。如果您需要重复该逻辑,某些库或帮助函数可以帮助您,但基本上所有这些都将在整个过程中使用某种形式的迭代array@vlaz是的,有,
find
方法。@SamiHult是数组上的某种迭代,但更简单:)此外,一旦找到匹配项,它将停止,原始代码没有。尽管如此,就复杂性而言,它基本上是一个
O(n)
操作。这构造了两个不必要的中间数组,如果找不到匹配项,将抛出一个错误。“一个1行程序”-包含三个每次遍历数组的不同操作。事实上,你可以把所有这些放在一行并不意味着你应该这样做。因为如果行数是唯一的度量标准,那么任何缩小器也会将整个文件转换为一行,因此代码也同样好。这会构造两个不必要的中间数组,如果找不到匹配项,则会抛出错误。“1行”-包含每次遍历数组的三个不同操作。事实上,你可以把所有这些放在一行并不意味着你应该这样做。因为如果行数是您唯一的度量,那么任何缩小器也会将整个文件转换为一行,因此代码将为equa