# JS Filter 轻量、易读、可解析、可执行的类 SQL 过滤语法,用于 JavaScript 数组过滤。 ## 语法特性 - **WHERE**: 条件过滤 - **ORDER BY**: 排序 - **LIMIT**: 限制结果数量 - **操作符**: `=`, `!=`, `>`, `<`, `>=`, `<=`, `IN`, `CONTAINS`, `LIKE`, `NOT LIKE`, `IS NULL`, `IS NOT NULL` - **逻辑**: `AND`, `OR` ## 语法示例 ```javascript // 基础过滤 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']"); // LIKE 操作 (支持 % 匹配任意字符,_ 匹配单个字符) filter(products, "WHERE name LIKE '%Apple%'"); filter(products, "WHERE name LIKE 'Apple%'"); filter(products, "WHERE name LIKE '%Phone'"); // NOT LIKE 操作 (排除匹配模式的项) filter(products, "WHERE name NOT LIKE '%Apple%'"); // IS NULL 操作 (匹配 null 或 undefined 的值) filter(users, "WHERE email IS NULL"); // IS NOT NULL 操作 (匹配非 null 且非 undefined 的值) filter(users, "WHERE email IS NOT NULL"); ``` ## 使用方法 ```javascript 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"); ``` ## 新增操作符说明 ### NOT LIKE 排除匹配指定模式的数据项。 ```javascript // 查找不包含 "Apple" 的产品 const nonAppleProducts = filter(products, "WHERE name NOT LIKE '%Apple%'"); ``` ### IS NULL / IS NOT NULL 检查字段值是否为 `null` 或 `undefined`。 ```javascript const usersWithNullEmail = [ { name: 'Alice', email: 'alice@example.com', age: 25 }, { name: 'Bob', email: null, age: 30 }, { name: 'Charlie', email: undefined, age: 35 }, ]; // 查找 email 为 null 或 undefined 的用户 const usersWithoutEmail = filter(usersWithNullEmail, "WHERE email IS NULL"); // 查找 email 不为 null 且不为 undefined 的用户 const usersWithEmail = filter(usersWithNullEmail, "WHERE email IS NOT NULL"); ``` **注意**: `IS NULL` 和 `IS NOT NULL` 会同时检查 JavaScript 的 `null` 和 `undefined` 值。