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

如何基于lookup规则合并JSON中指定前缀键的对应值?

原有代码问题

  • 遍历对象错误:循环遍历的是规则配置数组input_lookup,而非待处理的输入对象input的键
  • 匹配逻辑颠倒:判断条件搞反了前缀和待匹配键的位置,且应该用前缀匹配而非任意位置匹配
  • 缺失核心逻辑:没有收集同前缀的取值做逗号拼接,也没有保留未匹配前缀的键值对

正确实现(JavaScript版本)

const input_lookup = [{"keyprefixname": "fruit","resultkey":"sweet" }, 
{"keyprefixname": "rate","resultkey":"ratex" }]

// 修正原输入对象缺失的逗号语法问题
const input = {
  'fruit_a': "red apple",
  'fruit_b': "green apple",
  'rate_a': "10$",
  'rate_b': "20$",
  'vegetable_a': "spinach",
  'vegetable_b': "carrot"
}

const result_output = {}
// 初始化所有规则对应的结果容器,用数组存储匹配到的多值
input_lookup.forEach(rule => {
  result_output[rule.resultkey] = []
})

// 遍历输入对象的所有键值对
for (const key in input) {
  const value = input[key]
  let isMatched = false
  // 校验是否匹配任意前缀规则
  for (const rule of input_lookup) {
    if (key.startsWith(rule.keyprefixname)) {
      result_output[rule.resultkey].push(value)
      isMatched = true
      break
    }
  }
  // 未匹配规则的键值对直接保留
  if (!isMatched) {
    result_output[key] = value
  }
}

// 同前缀多值转逗号拼接字符串
input_lookup.forEach(rule => {
  result_output[rule.resultkey] = result_output[rule.resultkey].join(',')
})

console.log(result_output)

正确实现(Python版本)

input_lookup = [{"keyprefixname": "fruit","resultkey":"sweet" }, 
{"keyprefixname": "rate","resultkey":"ratex" }]

# 修正原输入对象缺失的逗号语法问题
input_data = {
  'fruit_a': "red apple",
  'fruit_b': "green apple",
  'rate_a': "10$",
  'rate_b': "20$",
  'vegetable_a': "spinach",
  'vegetable_b': "carrot"
}

result_output = {}
# 初始化所有规则对应的结果容器
for rule in input_lookup:
    result_output[rule['resultkey']] = []

# 遍历输入对象的所有键值对
for key, value in input_data.items():
    is_matched = False
    # 校验是否匹配任意前缀规则
    for rule in input_lookup:
        if key.startswith(rule['keyprefixname']):
            result_output[rule['resultkey']].append(value)
            is_matched = True
            break
    # 未匹配规则的键值对直接保留
    if not is_matched:
        result_output[key] = value

# 同前缀多值转逗号拼接字符串
for rule in input_lookup:
    result_output[rule['resultkey']] = ','.join(result_output[rule['resultkey']])

print(result_output)

两个版本运行后输出都和预期结果完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:48:00