如何基于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
相关产品推荐
相关产品推荐

