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

如何高效过滤JavaScript对象中不符合指定type属性的字段?

实现方案

核心优化思路如下:

  • 把types数组转换为Set结构,利用Set O(1)的查找效率,替代原来数组includes方法O(n)的查找开销,当types数组元素较多时性能提升非常明显
  • 原有三层遍历是逻辑上不可省略的,因为需要检查每个field元素的类型,只需优化查询环节和冗余判断即可

优化后代码

// 先转Set,全局只需要执行一次
const validTypes = new Set(types);

Object.values(data).forEach(suite => {
  suite.fields.forEach(fieldRow => {
    // 普通for循环比forEach性能更好,减少函数调用开销
    for (let i = 0; i < fieldRow.length; i++) {
      const field = fieldRow[i];
      // 只有field不为null 且 类型不在合法集合中才修改
      if (field && !validTypes.has(field.type)) {
        fieldRow[i] = null;
      }
    }
  });
});

额外可选优化

如果你确定很多行都是全null的情况,可以加一层空行判断,提前跳过无有效元素的行,进一步减少遍历次数:

const validTypes = new Set(types);

Object.values(data).forEach(suite => {
  suite.fields.forEach(fieldRow => {
    // 当前行全为null直接跳过,不需要遍历每个元素
    if (fieldRow.every(item => item === null)) return;
    for (let i = 0; i < fieldRow.length; i++) {
      const field = fieldRow[i];
      if (field && !validTypes.has(field.type)) {
        fieldRow[i] = null;
      }
    }
  });
});

如果你的数据规模很小,比如和示例一致只有少量套房、几行数据,两种写法的性能差异几乎感知不到,优化后的写法更适合大规模数据的场景。

内容的提问来源于stack exchange,提问作者niklasbec

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:06:02