You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过数组元素值获取其索引?(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:41:30