You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 00:55:18