如何使用startsWith过滤对象并获取符合条件的键对应值?
如何过滤对象获取以指定前缀开头的键值
你现在的代码已经正确筛选出了所有以checkpoint开头的键名,接下来只需要把这些键名映射成对应的键值就可以啦!
方法一:filter + map组合实现
在你现有筛选逻辑的基础上,新增map方法遍历筛选后的键名,从原对象中取出对应的值即可:
var data = { practicals: '0', checkpoint01: '0', checkpoint02: '0', checkpoint03: '0', checkpoint04: '0', checkpoint05: '0', checkpoint06: '0', checkpoint07: '0', checkpoint08: '0', checkpoint09: '0', checkpoint10: '0', total: '0' } var res = Object.keys(data) .filter(v => v.startsWith('checkpoint')) .map(key => data[key]) // 新增这一步,将键名转换为对应键值 console.log(res) // 输出:["0", "0", "0", "0", "0", "0", "0", "0", "0", "0"]
方法二:Object.entries一步完成
如果想要更连贯的逻辑,可以直接用Object.entries获取对象的键值对数组,先过滤再提取值:
var data = { practicals: '0', checkpoint01: '0', checkpoint02: '0', checkpoint03: '0', checkpoint04: '0', checkpoint05: '0', checkpoint06: '0', checkpoint07: '0', checkpoint08: '0', checkpoint09: '0', checkpoint10: '0', total: '0' } var res = Object.entries(data) .filter(([key]) => key.startsWith('checkpoint')) // 筛选符合前缀的键值对 .map(([_, value]) => value) // 提取键值对中的值 console.log(res)
原代码只输出键名的原因
Object.keys(data)返回的是对象所有键名组成的数组,filter方法只是对键名进行筛选,并没有去关联原对象的键值,所以加上map步骤就能完成从键名到键值的转换啦。
内容的提问来源于stack exchange,提问作者user10021926
相关产品推荐
相关产品推荐

