在对象数组中查找匹配属性失败,无法获取对应颜色值求助
问题分析与解决思路
首先得说,你这段代码的核心问题是逻辑绕错了,完全没必要去遍历对象的键来做匹配,而且这还导致了错误的判断逻辑,自然拿不到结果。
咱们拆解下原代码的问题:你写的Object.keys(obj).find(e => obj[e].type == tag)是个无效逻辑——Object.keys(obj)会返回当前对象的键数组(比如第一个对象就是['type', 'colour']),当e取type时,obj[e]是字符串"lecture",你再去访问字符串的.type属性,得到的只会是undefined,永远不可能等于tag的值,所以整个过滤逻辑根本匹配不到任何元素,控制台当然没输出。
正确的实现方式
你的目标是找到对应type的颜色值,这里用find方法更合适(因为你只需要一个匹配项),直接匹配对象的type属性就好:
方法1:用find直接获取目标对象并取颜色值
const tag = 'lecture'; const eventColour = [ { type: "lecture", colour: "red" }, { type: "social", colour: "blue" }, { type: "break", colour: "green" } ]; // 找到匹配type的对象 const matchedEvent = eventColour.find(obj => obj.type === tag); // 做个判空处理,避免找不到时出错 if (matchedEvent) { console.log(matchedEvent.colour); // 输出 red } else { console.log('未找到对应的事件类型'); }
方法2:如果存在多个同类型的情况(用filter)
要是你的数组里可能有多个type相同的对象,用filter返回所有匹配项,再按需取颜色:
const matchedEvents = eventColour.filter(obj => obj.type === tag); if (matchedEvents.length > 0) { // 取第一个匹配项的颜色,或者遍历所有项 console.log(matchedEvents[0].colour); }
内容的提问来源于stack exchange,提问作者Bomber
相关产品推荐
相关产品推荐

