如何检索JSON中值为true的动态键并拼接为目标字符串?
问题描述
我有如下JSON响应:
{ "A":{"Option1":true,"Option2":true,"Option3":false}, "B":{"OptionX":true,"OptionY":true,"OptionZ":false} }
我希望获取值为true的选项名称,组成字符串:Option1, Option2, OptionX, OptionY
我尝试了以下代码但未成功:
Array.from(this.model).forEach(child => { console.log(child, 'child name') });
解决方案
你之前的代码无效是因为this.model是普通对象,Array.from()无法直接将其转为可遍历的数组。这里提供两种可行的实现方式:
- 方式一:基础遍历写法
const optionNames = []; // 遍历外层对象的每个属性(A、B) for (const group of Object.values(this.model)) { // 遍历子对象的每个选项 for (const [name, value] of Object.entries(group)) { if (value) { optionNames.push(name); } } } // 拼接成目标字符串 const resultStr = optionNames.join(', '); console.log(resultStr); // 输出:Option1, Option2, OptionX, OptionY
- 方式二:链式函数写法(更简洁)
const resultStr = Object.values(this.model) .flatMap(group => Object.entries(group) .filter(([_, isEnabled]) => isEnabled) .map(([name]) => name) ) .join(', '); console.log(resultStr);
关键说明
Object.values(this.model):获取外层对象的所有子对象(即A、B对应的对象)Object.entries(group):把子对象转为[选项名, 布尔值]的数组,方便筛选flatMap:将多个子数组的结果合并成一个数组,避免嵌套join(', '):把数组元素按指定分隔符拼接成字符串
内容的提问来源于stack exchange,提问作者Vida
相关产品推荐
相关产品推荐

