本文介绍如何像 jquery 选择 xml 节点一样简洁高效地过滤 json 数组,利用原生 `array.prototype.filter()` 和动态属性访问(`obj[key]`)实现与 `'creature > desert:contains("true")'` 等效的语义化筛选。
从 XML 迁移到 JSON 后,开发者常怀念 jQuery 提供的链式、类 CSS 选择器式的过滤能力(如 $('Creature > Desert:contains("true")').parent())。但 JSON 作为纯数据结构,不支持 DOM 查询语法——这并非缺陷,而是契机:我们可借助现代 JavaScript 的函数式方法,写出更清晰、更可控、无需依赖库的等效逻辑。
核心思路非常直接:将用户选中的地形字段名(如 "Desert")作为动态键,遍历数组,检查对应属性是否为 true。使用 filter() 配合方括号属性访问即可优雅实现:
const creatures = [
{ "Name": "Someone", "Desert": false, "Woods": false, "Mountains": false, "Swamp": false },
{ "Name": "Sandy", "Desert": true, "Woods": false, "Mountains": false, "Swamp": false },
{ "Name": "Bogart", "Desert": false, "Woods": false, "Mountains": false, "Swamp": true }
];
const selectedTerrain = "Swamp"; // 来自 radio 按钮的 value 值
const f
ilteredCreatures = creatures.filter(creature => creature[selectedTerrain] === true);
// → [{ "Name": "Bogart", "Desert": false, ..., "Swamp": true }]✅ 优势说明:
⚠️ 注意事项:
立即学习“Java免费学习笔记(深入)”;
总结:JSON 过滤无需“模拟 XML 语法”,而应拥抱其数据本质——用 filter() + 动态键访问,代码更短、逻辑更明、维护性更高。一次迁移,两次进化。