如何通过数组元素值获取其索引?(PowerShell+Chilkat JSON场景)
根据元素值获取Chilkat JSON数组的索引
我帮你梳理下怎么实现这个需求——Chilkat的JsonArray确实没有直接提供根据值查找索引的内置方法,不过我们可以通过遍历数组元素来手动实现,下面是具体的代码修改和说明:
$json = New-Object Chilkat.JsonObject $jsonStr = '{ "id": 1, "name": "A green door", "tags": ["home", 22, "green"], "price": 125 }' $success = $json.Load($jsonStr) if ($success -ne $true) { Write-Host $json.LastErrorText exit } # 获取"tags"数组 $tagsArray = $json.ArrayOf("tags") if ($tagsArray -eq $null ) { Write-Host "Failed to get tags array" exit } # 定义要查找的目标值(可以替换成你需要的元素,比如22) $targetValue = "green" $targetIndex = -1 # 遍历数组,逐个匹配元素值 for ($i = 0; $i -lt $tagsArray.Size(); $i++) { # 使用GetAny()获取元素,兼容字符串、数字等混合类型 $currentElement = $tagsArray.GetAny($i) # 注意类型匹配:如果目标是数字,建议显式转换类型后再比较 if ($currentElement -eq $targetValue) { $targetIndex = $i break # 找到第一个匹配项就退出循环 } } # 输出查找结果 if ($targetIndex -ne -1) { Write-Host "找到目标值 '$targetValue',索引为: $targetIndex" } else { Write-Host "未找到目标值 '$targetValue'" }
关键细节说明:
- 用
$tagsArray.Size()获取数组的总元素数,作为循环的边界 - 使用
GetAny()方法获取元素,这个方法可以兼容字符串、整数等不同类型的元素,避免类型转换报错 - 如果你的目标值是数字(比如示例中的
22),为了避免隐式类型转换导致的匹配问题,可以显式转换类型后比较:$targetValue = 22 # ... if ([int]$currentElement -eq $targetValue) { $targetIndex = $i break } - 如果数组存在重复元素,上述代码会返回第一个匹配项的索引;如果需要收集所有匹配的索引,去掉
break并把索引存入一个数组即可
内容的提问来源于stack exchange,提问作者user1513388
相关产品推荐
相关产品推荐

