在React中使用Lodash将JSON数组解析为Map数组
使用Lodash将JSON数组转换为目标Map数组(React场景)
没问题,这其实就是把你已经掌握的非数组场景逻辑,套用到数组遍历里就行,用Lodash的_.map配合_.mapValues和_.get就能轻松实现需求,具体方案如下:
核心思路
我们需要遍历原始JSON中的hits数组,对数组里的每一个对象,用你已有的映射表(mapkey对应源XPath)来生成目标对象,最终把这些目标对象组合成新的数组。
完整代码示例
import _ from 'lodash'; // 你的原始JSON数据 const rawData = { "status": { "time": 175 }, "hits": [ { "key1": "value1", "key2": "value2" }, { "key1": "value1", "key2": "value2" }, { "key1": "value1", "key2": "value2" } ] }; // 你持有的mapkey与源XPath映射表 const xpathMapping = { mapkey1: 'key1', mapkey2: 'key2' }; // 转换逻辑 const targetArray = _.map(rawData.hits, (hitItem) => { // 对每个hit对象,复用非数组场景的映射逻辑 return _.mapValues(xpathMapping, (path) => _.get(hitItem, path)); }); // 输出结果就是你要的目标数组 console.log(targetArray);
代码解释
_.map(rawData.hits, ...):遍历原始数据中的hits数组,对每一个元素(也就是每个hitItem)执行后续转换逻辑- 内部的
_.mapValues(xpathMapping, (path) => _.get(hitItem, path)):和你熟悉的非数组场景写法几乎一致,只是把数据源从整个rawData换成了数组里的单个hitItem。这里的_.get非常灵活,哪怕你的XPath是嵌套路径(比如'some.nested.key')也能正确取值,完全适配复杂的源数据结构。
如果你的映射表中的XPath是基于整个原始数据而非单个hit对象,只需要把_.get的第一个参数换成rawData即可,但根据你的需求描述,显然是每个hit对应一个目标对象,所以上面的代码完全符合要求。
内容的提问来源于stack exchange,提问作者Lorin Ahmed
相关产品推荐
相关产品推荐

