Underscore.js是否有Lodash _.set()等效方法?嵌套属性添加单行代码方案
解答
内置方法存在性说明
Underscore.js 没有内置与 Lodash _.set() 功能完全等效的原生方法,你需要自行实现对应能力。
单行嵌套属性设置方案
你可以用Array.prototype.reduce实现符合需求的单行工具函数,不存在的嵌套层级会自动初始化:
// 参数说明:obj为目标对象,path为属性路径(支持'a.b.c'字符串或['a','b','c']数组格式),value为要设置的值 const setNestedProp = (obj, path, value) => (typeof path === 'string' ? path.split('.') : path).reduce((curr, key, i, arr) => i === arr.length - 1 ? (curr[key] = value) : (curr[key] = curr[key] ?? {}), obj)
- 调用示例:
const myObj = {} setNestedProp(myObj, 'profile.contact.phone', '13xxxxxxxxx') // 执行后myObj结构为 {profile: {contact: {phone: '13xxxxxxxxx'}}}
如果需要兼容不支持空值合并运算符(??)的旧环境,把curr[key] = curr[key] ?? {}替换成curr[key] = curr[key] || {}即可。
内容的提问来源于stack exchange,提问作者Jirik
相关产品推荐
相关产品推荐

