从XML迁移到JSON后,如何优雅过滤生物地形数据数组?
优雅过滤JSON数组的方案
完全不用switch/case,利用JavaScript对象的动态属性访问特性就能实现和原来XML逻辑一致的优雅过滤,代码比之前更简洁:
核心实现代码
// 假设 creaturesJsonArray 是你的JSON格式生物数组 // selectedTerrain 是从单选框获取的选中值(比如"Desert"、"Woods") const filteredCreatures = creaturesJsonArray.filter(creature => { // 先检查对象是否包含该属性,避免非预期报错 return creature.hasOwnProperty(selectedTerrain) && creature[selectedTerrain] === true; });
为什么这比switch/case好?
- 和原来XML的动态选择节点逻辑完全匹配:都是根据选中的地形值,直接定位到对应的属性进行判断
- 扩展性强:以后新增地形类型(比如"Ocean"),不用修改过滤代码,只要JSON结构和单选框值对应上就行
- 代码更简洁,逻辑清晰,没有冗余的分支判断
额外说明
如果担心单选框的值和JSON属性名可能存在大小写不匹配的情况,可以提前做一次统一转换:
const normalizedTerrain = selectedTerrain.trim().toLowerCase(); const filteredCreatures = creaturesJsonArray.filter(creature => { // 转换为JSON属性的首字母大写格式 const terrainKey = normalizedTerrain.charAt(0).toUpperCase() + normalizedTerrain.slice(1); return creature.hasOwnProperty(terrainKey) && creature[terrainKey] === true; });
内容的提问来源于stack exchange,提问作者Iver Cold
相关产品推荐
相关产品推荐

