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

如何在JS/Node中实现类似PostgreSQL jsonb @>算子的对象包含校验

方案实现

轻量原生实现

你可以自行实现一个递归校验函数,完全对齐PostgreSQL @>算子的核心规则:基础值严格相等、对象递归校验所有匹配键、数组校验子集(不关心顺序),代码如下:

function contains(target, pattern) {
  // 基础类型、null/undefined直接判等
  if (pattern === null || typeof pattern !== 'object') {
    return Object.is(target, pattern);
  }

  // 数组匹配逻辑:模式数组的每一项都能在目标数组中找到匹配项
  if (Array.isArray(pattern)) {
    if (!Array.isArray(target)) return false;
    return pattern.every(patternItem => 
      target.some(targetItem => contains(targetItem, patternItem))
    );
  }

  // 对象匹配逻辑:模式对象的每一个键都在目标对象中存在且值匹配
  return Object.keys(pattern).every(key => 
    Object.prototype.hasOwnProperty.call(target, key) && contains(target[key], pattern[key])
  );
}

测试验证

运行你给出的示例会返回符合预期的结果:

const result = contains(
  { "foo": [1, 2, 3], "bar": "baz" },
  { "foo": [3, 1] }
);
console.log(result); // 输出 true

如果需要调整数组匹配规则为严格顺序匹配,只需要把数组分支的逻辑改为按索引逐位递归校验即可。

第三方库方案

如果不需要自定义规则,也可以直接使用npm上专门对齐PostgreSQL JSON包含规则的公开包,不用自己维护边界case处理逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:24:08