You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:47:31