如何将动态Object转换为指定格式的Object数组?
Convert Dynamic Object to Structured Filter Array
我来帮你搞定这个动态对象转结构化数组的需求!根据你给出的输入输出示例和规则,这里有一个完全适配的JavaScript实现方案:
核心实现函数
function convertFilterObject(inputObj) { const filterEntries = []; // 遍历输入对象的所有键值对,适配任意动态结构 for (const [field, value] of Object.entries(inputObj)) { // 跳过空值和Infinity这类无效数据 if (value === "" || value === Infinity) { continue; } // 处理数组类型的字段:每个元素单独生成一个过滤条目 if (Array.isArray(value)) { value.forEach(item => { filterEntries.push({ field, value: item, operator: "equal" }); }); } else { // 非数组类型直接生成单个过滤条目 filterEntries.push({ field, value, operator: "equal" }); } } return filterEntries; }
关键特性说明
- 动态适配输入:使用
Object.entries()遍历对象,不管输入对象有多少字段都能处理 - 无效值过滤:自动跳过空字符串
""和Infinity,只保留有效数据 - 数组字段拆分:像
_groups这种数组类型的字段,会把每个元素单独转换成一条过滤规则,完全匹配你给出的示例输出 - 统一结构输出:所有有效数据都会转换成
{field, value, operator}的格式,operator固定为"equal"
测试示例
用你提供的输入对象测试:
const input = { _groups: ["d1830f7c-12ac-4abf-bc03-f0b70e26f8f2", "d0348b51-dcaa-2227-f0ff-912b27100aee"], _eror: "", number: "", seen_days: Infinity, address: "", status: "ACTIVE" }; console.log(convertFilterObject(input));
输出结果和你预期的完全一致:
[ { "field": "_groups", "value": "d1830f7c-12ac-4abf-bc03-f0b70e26f8f2", "operator": "equal" }, { "field": "_groups", "value": "d0348b51-dcaa-2227-f0ff-912b27100aee", "operator": "equal" }, { "field": "status", "value": "ACTIVE", "operator": "equal" } ]
内容的提问来源于stack exchange,提问作者August Dev
相关产品推荐
相关产品推荐

