如何从JavaScript对象中提取有效值属性生成新对象?
如何动态过滤JavaScript对象中的无效值生成新对象?
嘿,这个动态过滤对象无效值的需求其实挺常见的,我给你分享几个实用的实现方式,完全能适配任意结构的对象,不管原对象的属性和值怎么变化,都能输出仅含有效值的新对象。
方法一:使用 Object.entries() + reduce()
这是比较经典的对象处理方式,通过遍历键值对来构建新对象:
const filterValidValues = (obj) => { return Object.entries(obj).reduce((result, [key, value]) => { // 自定义有效值判断规则:排除null、空数组,其他合法值保留 const isValid = value !== null && (!Array.isArray(value) || value.length > 0); if (isValid) { result[key] = value; } return result; }, {}); }; // 测试你的示例数据 let data = { color: "green", color1: "red", color2: null, color3: 34, color4: null, color5: true, color6: [] }; let filteredData = filterValidValues(data); console.log(filteredData); // 输出: { color: "green", color1: "red", color3: 34, color5: true }
这段代码的逻辑很清晰:
Object.entries(obj)把原对象转换成键值对数组reduce()逐步构建新对象,每一步判断当前值是否符合有效值规则- 最后返回仅包含有效值的新对象
方法二:使用 Object.entries() + filter() + Object.fromEntries()
这个方法更简洁,利用数组过滤后直接转回对象:
const filterValidValues = (obj) => { return Object.fromEntries( Object.entries(obj).filter(([key, value]) => { // 同样的有效值判断规则 return value !== null && (!Array.isArray(value) || value.length > 0); }) ); };
filter() 先把符合要求的键值对筛选出来,再通过 Object.fromEntries() 把筛选后的键值对数组重新转换成对象,代码更紧凑,可读性也很强。
自定义扩展规则
如果你需要排除更多类型的无效值(比如undefined、空字符串''),只需要修改判断条件即可,比如:
const filterValidValues = (obj) => { return Object.fromEntries( Object.entries(obj).filter(([key, value]) => { // 扩展规则:排除null、undefined、空数组 return value !== null && value !== undefined && (!Array.isArray(value) || value.length > 0); }) ); };
这样不管原对象的结构怎么变,只要传入这个函数,就能得到符合你要求的纯净对象。
内容的提问来源于stack exchange,提问作者Igor-Vuk
相关产品推荐
相关产品推荐

