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

不使用Eval()实现条件动态求值:Like运算符报错排查

问题分析与修复

你的报错根源是字符串没有test方法,test是正则表达式对象的专属方法。你当前的like函数错误调用了字符串的test方法,而且硬编码的正则/y/不会把变量y解析成实际传入的匹配值。

不需要在filter代码块里单独处理Like运算符,只需要修正conditions里的like实现即可:

const conditionalArray = [
  { name: "fridge", condition: "like", value: "sam" },
];

const dataTofilter = [
  { line: "Blah", revene: 3, sale: 2, fridge: "samsung" },
];

const conditions = {
  // 用RegExp构造函数创建动态正则,调用test匹配字符串x
  'like': (x, y) => new RegExp(y).test(x),
  // 如果需要不区分大小写,可添加'i'标志:new RegExp(y, 'i').test(x)
};

const result = dataTofilter.filter(data => {
  for (const el of conditionalArray) {
    if (!conditions[el.condition](data[el.name], el.value)) {
      return false;
    }
  }
  return true;
});

console.log(result); // 输出:[{ line: "Blah", revene: 3, sale: 2, fridge: "samsung" }]

关键修改点

  • 替换x.test(/y/)为new RegExp(y).test(x):用传入的y动态生成正则表达式,再用该正则去匹配字符串x。
  • 可选:如果需要模糊匹配不区分大小写,在创建正则时添加'i'标志,比如new RegExp(y, 'i')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:12:30