Ramda JS 基于允许列表设置对象对应属性为true的实现方法
Ramda 实现方案
你可以根据自己的偏好选择以下两种实现方式:
方案1:遍历属性判断
完全符合你描述的「遍历对象属性,判断是否在模板数组中再修改值」的逻辑,可读性更高:
import * as R from 'ramda'; // 原始数据 const currentObject = { errors: false, values: false, warnings: false, }; const template = ['values', 'warnings']; // 核心处理逻辑 const processedObject = R.mapObjIndexed( (val, key) => R.includes(key, template) ? true : val, currentObject );
方案2:对象合并实现
代码更简洁,性能优于遍历判断(尤其当template数组长度较长时):
import * as R from 'ramda'; // 原始数据 const currentObject = { errors: false, values: false, warnings: false, }; const template = ['values', 'warnings']; // 核心处理逻辑:先把模板数组转成属性全为true的对象,再和原对象合并覆盖 const overrideObject = R.fromPairs(R.map(key => [key, true], template)); const processedObject = R.mergeRight(currentObject, overrideObject);
注意:Ramda 所有方法默认执行不可变操作,两种实现都不会修改原始的
currentObject,会返回处理后的全新对象,符合函数式编程的无副作用要求。
内容的提问来源于stack exchange,提问作者Virto111
相关产品推荐
相关产品推荐

