AngularJS中如何将多组键值对赋值给某一键并构造目标数组
解决方法:将对象数组转换为键值对集合并嵌入目标数组
嘿,我完全get到你的需求了——就是把源JSON里的对象数组,转成键值对形式的集合,再把这个集合放到另一个数组中某个对象的parentKey字段里作为值对吧?下面我用JavaScript给你写个清晰的示例,你可以直接套用或者调整:
步骤1:定义源数据
先把你提供的源数据整理成可测试的格式(补全了截断的部分):
const sourceJSON = { "Array": [ { "key1": "id_001", "key2": "value2_001", "key3": "value3_001" }, { "key1": "id_002", "key2": "value2_002", "key3": "value3_002" }, { "key1": "id_003", "key2": "value2_003", "key3": "value3_003" } ] };
步骤2:将对象数组转换为键值对集合
这里用Array.reduce()方法来实现转换,核心是选择一个字段作为键(比如示例里的key1),把每个对象对应到这个键下。分两种场景:
场景A:键值唯一(重复键直接覆盖)
如果你的key1值不会重复,或者重复时只需要保留最后一个对象,用这个版本:
// 转换为键值对集合,key1的值作为键,整个对象作为值 const keyValueMap = sourceJSON.Array.reduce((result, currentItem) => { result[currentItem.key1] = currentItem; return result; }, {});
场景B:键值可能重复(重复键存为数组)
如果key1有重复,需要把同键的所有对象都保留,改成数组存储:
const keyValueMapWithDuplicates = sourceJSON.Array.reduce((result, currentItem) => { const key = currentItem.key1; // 如果键不存在,先初始化一个空数组 if (!result[key]) { result[key] = []; } result[key].push(currentItem); return result; }, {});
步骤3:构造目标数组
现在把转换好的键值对集合,赋值给目标数组中对象的parentKey:
// 目标数组,包含一个对象,parentKey的值就是我们的键值对集合 const targetArray = [ { parentKey: keyValueMap, // 这里替换成keyValueMapWithDuplicates就能用场景B的结果 // 你还可以添加其他需要的字段 description: "这是包含键值对集合的对象" } ];
验证结果
打印目标数组看看最终结构:
console.log(JSON.stringify(targetArray, null, 2));
输出的JSON结构会是这样(场景A的结果):
[ { "parentKey": { "id_001": { "key1": "id_001", "key2": "value2_001", "key3": "value3_001" }, "id_002": { "key1": "id_002", "key2": "value2_002", "key3": "value3_002" }, "id_003": { "key1": "id_003", "key2": "value2_003", "key3": "value3_003" } }, "description": "这是包含键值对集合的对象" } ]
你可以根据自己的实际需求,调整用来作为键的字段(比如换成key2),或者修改集合的存储逻辑~
内容的提问来源于stack exchange,提问作者badaBinggg'
相关产品推荐
相关产品推荐

