Files
sql-like-filter/README.md
2025-12-29 15:30:30 +08:00

1.6 KiB

JS Filter

轻量、易读、可解析、可执行的类 SQL 过滤语法,用于 JavaScript 数组过滤。

语法特性

  • WHERE: 条件过滤
  • ORDER BY: 排序
  • LIMIT: 限制结果数量
  • 操作符: =, !=, >, <, >=, <=, IN, CONTAINS
  • 逻辑: AND, OR

语法示例

// 基础过滤
filter(users, "WHERE metadata.type = 'user'");

// 多条件
filter(users, "WHERE metadata.tags CONTAINS 'premium' AND metadata.region = 'beijing'");

// 排序
filter(users, "WHERE metadata.type = 'user' ORDER BY metadata.created_at DESC");

// 限制数量
filter(users, "WHERE metadata.type = 'user' ORDER BY metadata.created_at DESC LIMIT 10");

// IN 操作
filter(users, "WHERE metadata.region IN ['beijing', 'shanghai']");

使用方法

import { filter } from '@kevisual/js-filter';

const users = [
  {
    metadata: {
      tags: ['premium', 'active'],
      type: 'user',
      region: 'beijing',
      created_at: '2024-03-15T10:00:00Z',
    },
  },
  {
    metadata: {
      tags: ['free'],
      type: 'admin',
      region: 'shanghai',
      created_at: '2024-01-10T09:00:00Z',
    },
  },
  {
    metadata: {
      tags: ['enterprise', 'premium'],
      type: 'user',
      region: 'guangzhou',
      created_at: '2024-04-05T12:00:00Z',
    },
  },
];

// 查找 premium 用户
const premiumUsers = filter(users, "WHERE metadata.tags CONTAINS 'premium'");

// 查找北京的用户,按创建时间倒序
const beijingUsers = filter(users, "WHERE metadata.region = 'beijing' ORDER BY metadata.created_at DESC");