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

如何使用jq为bundleDependencies数组添加元素时忽略重复项

使用jq向bundleDependencies添加依赖时忽略重复项

问题场景

现有如下包配置JSON字符串:

json_string="$(cat <<'END'
{
  "name": "hello",
  "dependencies": {
    "progress": "^2.0.0",
    "tar": "^6.2.1"
  },
  "devDependencies": {
    "node-fetch": "~2.6.1",
    "yargs": "^16.2.0"
  }
}
END
)"

通过以下命令依次向bundleDependencies数组添加依赖键时:

# 添加dependencies的键到bundleDependencies
json_string="$(jq ".bundleDependencies += (.dependencies | keys)" <<< "$json_string")"
# 添加devDependencies的键到bundleDependencies
json_string="$(jq ".bundleDependencies += (.devDependencies | keys)" <<< "$json_string")"

重复执行添加devDependencies的命令,会导致数组中出现重复项:

jq ".bundleDependencies += (.devDependencies | keys)" <<< "$json_string"

输出结果:

{
  "name": "hello",
  "dependencies": {
    "progress": "^2.0.0",
    "tar": "^6.2.1"
  },
  "devDependencies": {
    "node-fetch": "~2.6.1",
    "yargs": "^16.2.0"
  },
  "bundleDependencies": [
    "progress",
    "tar",
    "node-fetch",
    "yargs",
    "node-fetch",
    "yargs"
  ]
}

解决方法

方法1:添加后自动去重

每次添加元素后,用unique过滤器对bundleDependencies数组去重,确保数组内元素唯一:

# 添加dependencies并去重
json_string="$(jq ".bundleDependencies += (.dependencies | keys) | .bundleDependencies |= unique" <<< "$json_string")"

# 添加devDependencies并去重
json_string="$(jq ".bundleDependencies += (.devDependencies | keys) | .bundleDependencies |= unique" <<< "$json_string")"

重复执行添加命令时,数组会自动去重,不会产生重复项。

方法2:一次性合并所有目标键并去重

如果无需分步添加,可直接合并dependencies和devDependencies的所有键,去重后赋值给bundleDependencies:

json_string="$(jq ".bundleDependencies = (.dependencies | keys) + (.devDependencies | keys) | .bundleDependencies |= unique" <<< "$json_string")"

方法3:精准添加不存在的元素

通过reduce遍历要添加的键,仅当元素不存在于数组中时才追加:

# 确保bundleDependencies存在(无则初始化为空数组),再添加devDependencies中未存在的键
json_string="$(jq '
  .bundleDependencies //= []
  | reduce (.devDependencies | keys[]) as $key (.;
    if .bundleDependencies | index($key) then . else .bundleDependencies += [$key] end
  )
' <<< "$json_string")"

内容的提问来源于stack exchange,提问作者stackbiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:26:20