jq技术问题:如何从已知键的对象值生成新对象?
解决思路
核心需求是用原对象中已知键对应的值构建新对象(第一个值作为键,第二个作为值)。map()是数组专属方法,对象无法直接调用,这应该是你之前尝试失败的原因。以下是几种直接可行的实现方式:
方法一:直接取值构建(最直观)
既然明确知道原对象的键,直接通过键获取对应的值,再用方括号语法把值作为新对象的键即可:
const originalObj = { "k1": "v1", "k2": "v2" }; // 已知键为k1、k2 const newObj = { [originalObj.k1]: originalObj.k2 }; console.log(newObj); // 输出 { "v1": "v2" }
方法二:提取值数组后构建(适配多键场景)
如果原对象键的数量不确定,但值的顺序明确,可先把对象的值提取为数组,再按顺序组合:
const originalObj = { "k1": "v1", "k2": "v2" }; const values = Object.values(originalObj); // 得到 ["v1", "v2"] const newObj = { [values[0]]: values[1] }; console.log(newObj); // 输出 { "v1": "v2" }
为什么map()不适用?
map()仅能处理数组,对象无法直接调用该方法。如果强行用map,需要先把对象转成键值对数组(比如Object.entries()),但对于当前需求来说完全是绕路,没必要这么做。
内容的提问来源于stack exchange,提问作者EnzoR
相关产品推荐
相关产品推荐

