如何使用Ramda将深层嵌套对象中的quantity从数字转为字符串
使用Ramda转换订单数据中quantity字段的类型
给定如下数据结构,需要将嵌套在orderInfoList -> productList里的quantity字段从数字类型转换为字符串类型:
const data = { orderInfoList: [ { orderNo: "string", productList: [ { productName: "string", quantity: 1 } ] } ] }
解决方案
利用Ramda的evolve和map函数可以优雅完成嵌套结构的字段转换,同时保证原数据不可变:
const { map, evolve, toString } = require('ramda'); // 转换单个商品的quantity字段为字符串 const transformProduct = evolve({ quantity: toString }); // 处理单个订单的productList数组 const transformOrder = evolve({ productList: map(transformProduct) }); // 处理整个数据结构的orderInfoList数组 const transformData = evolve({ orderInfoList: map(transformOrder) }); // 调用示例 const transformedData = transformData(data);
代码说明
evolve:针对对象的指定字段应用转换逻辑,返回全新对象,不会修改原数据。这里分别用它处理商品、订单和顶层数据的对应字段。map:遍历数组,对每个元素应用转换函数,用来批量处理orderInfoList和productList中的每一项。toString:Ramda内置的转换函数,将数字类型的quantity转为字符串类型。
如果追求更紧凑的写法,也可以将函数直接嵌套组合:
const transformData = evolve({ orderInfoList: map(evolve({ productList: map(evolve({ quantity: toString })) })) });
内容的提问来源于stack exchange,提问作者pifuegtq23
相关产品推荐
相关产品推荐

