如何筛选拥有指定门对应钥匙的Characters数组对象?
解决方法
要筛选出拥有能打开特定门的钥匙的角色,你需要结合使用Array.filter()和Array.some()方法:
核心代码示例
const characters = [ { id: "1", type: "water", keys: [{ name: "key_786", door: "XOPR" }] }, { id: "2", type: "fire", keys: [{ name: "key_23", door: "JTHF" }] }, { id: "3", type: "wind", keys: [{ name: "key_987", door: "XOPR" }] }, ]; const targetDoor = 'XOPR'; // 筛选出拥有对应门钥匙的角色 const validCharacters = characters.filter(character => { // 检查当前角色的钥匙数组中,是否存在能打开目标门的钥匙 return character.keys.some(key => key.door === targetDoor); }); console.log(validCharacters); // 输出结果: // [ // { id: "1", type: "water", keys: [{ name: "key_786", door: "XOPR" }] }, // { id: "3", type: "wind", keys: [{ name: "key_987", door: "XOPR" }] } // ]
方法说明
filter():遍历characters数组,只保留返回true的元素,最终得到符合条件的角色数组。some():检查当前角色的keys数组,只要有一个钥匙的door属性匹配目标门,就返回true,表示该角色符合要求。
你之前尝试filter没成功,大概率是没处理keys是数组的情况——直接判断character.keys.door是无效的,因为keys是数组而非单个对象,必须遍历它来检查每一把钥匙。
内容的提问来源于stack exchange,提问作者saran belovid
相关产品推荐
相关产品推荐

