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

RxJS:如何用规则对象数组判断单个对象是否符合条件并加入数组?

用RxJS操作符实现对象规则校验并收集结果

实现思路

  • 将目标对象转为Observable流,利用RxJS操作符完成校验逻辑
  • 定义规则校验函数,区分正则匹配和普通值全等对比两种场景
  • 使用filter过滤符合规则的对象,tap执行结果收集的副作用

完整代码实现

import { of } from 'rxjs';
import { filter, tap } from 'rxjs/operators';

// 目标对象
const pnt = {
  "pnt_name": "P1101_HT01",
  "base": 1
};

// 校验规则数组
const rules = [
  {
    "key": "pnt_name",
    "value": "P.*"
  },
  {
    "key": "base",
    "value": 1
  }
];

// 存储符合条件的对象数组
const positiveArray = [];

// 校验函数:判断对象是否符合任一规则
const matchesAnyRule = (obj, rules) => {
  return rules.some(rule => {
    const objValue = obj[rule.key];
    // 字符串类型规则当作正则处理
    if (typeof rule.value === 'string') {
      const regex = new RegExp(rule.value);
      return regex.test(objValue);
    }
    // 非字符串类型直接做全等校验
    return objValue === rule.value;
  });
};

// RxJS流处理逻辑
of(pnt).pipe(
  // 过滤出符合规则的对象
  filter(obj => matchesAnyRule(obj, rules)),
  // 将符合条件的对象推入目标数组
  tap(validObj => positiveArray.push(validObj))
).subscribe(() => {
  // 订阅触发执行,此时可查看结果数组
  console.log('符合条件的对象数组:', positiveArray);
});

关键说明

  • of(pnt):把单个对象包装成Observable流,这是RxJS处理数据的基础
  • filter:核心校验环节,只保留通过matchesAnyRule校验的对象
  • tap:执行副作用操作(向数组添加元素),不会修改流中的数据
  • 订阅流:RxJS是惰性执行模型,只有调用subscribe后才会启动整个处理流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:07:50