如何通过Object.keys()的filter方法返回对象值而非键?
问题分析
你当前的代码中,Object.keys(notes)会返回对象的键数组,filter方法的作用是筛选出数组中符合条件的元素(也就是键),所以最终result是符合前缀条件的键组成的数组。而内部console.log能输出值,是因为你通过键notes[note]取到了对应的值,但这不会改变filter返回键的结果。
解决方案
要返回符合条件的对象值组成的数组,有几种简洁的实现方式:
方法1:filter + map 组合
先筛选出符合前缀的键,再通过键映射到对应的值:
const notes = { 'jk2334|notes-md-23': { id: 'notes-md-23', text: 'First Note' }, 'jk2334|notes-xd-34': { id: 'notes-xd-34', text: 'Second Note' }, 'fd4345|notes-mf-54': { id: 'notes-mf-54', text: 'Third Note' } }; const result = Object.keys(notes) .filter(key => key.startsWith('jk2334')) .map(key => notes[key]); console.log(result); // 输出:[{id: 'notes-md-23', text: 'First Note'}, {id: 'notes-xd-34', text: 'Second Note'}]
方法2:使用Object.entries
Object.entries会返回键值对数组,直接过滤后提取值:
const result = Object.entries(notes) .filter(([key]) => key.startsWith('jk2334')) .map(([_, value]) => value);
方法3:使用reduce(单次遍历)
如果数据量较大,reduce可以实现一次遍历完成筛选和收集,效率更高:
const result = Object.keys(notes).reduce((acc, key) => { if (key.startsWith('jk2334')) { acc.push(notes[key]); } return acc; }, []);
内容的提问来源于stack exchange,提问作者Md Muaz Ahmed
相关产品推荐
相关产品推荐

