如何将多值属性对象转换为Prisma过滤用对象数组?
实现方法
要完成这个转换,核心思路就是遍历原对象的每个字段,把逗号分隔的字符串拆分成单个值,再逐个生成符合要求的过滤对象。用JavaScript可以这样实现:
基础实现代码
const queryObj = { color: 'red,white', size: 'xl', manufacturer: 'adidas,nike' }; const filterList = Object.entries(queryObj).flatMap(([filter, values]) => { return values.split(',').map(value => ({ filter, value })); }); console.log(filterList); // 输出结果: // [ // {filter: "color", value: "red"}, // {filter: "color", value: "white"}, // {filter: "size", value: "xl"}, // {filter: "manufacturer", value: "adidas"}, // {filter: "manufacturer", value: "nike"}, // ]
逻辑说明
Object.entries(queryObj):把原对象转换为键值对数组,格式类似[['color', 'red,white'], ['size', 'xl'], ...]flatMap:遍历每个键值对的同时,自动扁平化后续生成的子数组,避免出现嵌套数组结构values.split(','):将每个字段的逗号分隔字符串拆分为单个值的数组,比如'red,white'会变成['red', 'white']map:把拆分后的每个值转换成{filter: 字段名, value: 单个值}的目标结构
优化版(处理值内空格)
如果后端返回的字符串可能包含多余空格(比如'adidas, nike'),可以给每个值加上trim()处理,确保值的格式干净:
const filterList = Object.entries(queryObj).flatMap(([filter, values]) => { return values.split(',').map(value => ({ filter, value: value.trim() })); });
内容的提问来源于stack exchange,提问作者Radas
相关产品推荐
相关产品推荐

