JavaScript中快速解析字符串形式函数参数的简洁方案
一行式解析键值对参数字符串并调用函数
核心简洁实现
针对你的需求,直接基于原逻辑压缩成一行代码,无需额外依赖:
const inputStr = "myFunc foo=bar arg2=123 arg1=baz"; myFunc(inputStr.split(" ").slice(1).reduce((params, item) => (params[item.split("=")[0]] = item.split("=")[1], params), {}));
逻辑说明
inputStr.split(" ").slice(1):拆分字符串后跳过第一个函数名字段,得到所有键值对字符串数组reduce遍历数组:将每个键值对拆分为键和值,直接添加到参数对象中,最后返回完整的参数对象传入myFunc
这个实现和你的基础代码逻辑完全一致,但简化为一行,满足你对简洁性的要求。
可选优化:自动转换数字类型
如果希望自动将数字字符串转为数字类型(而非全部传字符串),可以用稍复杂一点的一行实现:
myFunc(inputStr.split(" ").slice(1).reduce((p,i)=>{const[k,v]=i.split("=");p[k]=isNaN(Number(v))?v:Number(v);return p},{}));
这里通过isNaN(Number(v))判断值是否为有效数字,是则转成数字类型,否则保留字符串。
扩展方案:支持子对象解析(供其他用户参考)
如果需要解析user.name=Alice这类嵌套子对象格式,可以用以下函数实现:
const parseParams = (str) => str.split(" ").slice(1).reduce((obj, item) => { const [keyPath, value] = item.split("="); const keys = keyPath.split("."); let current = obj; keys.forEach((key, idx) => { current[key] = idx === keys.length - 1 ? (isNaN(Number(value)) ? value : Number(value)) : current[key] || {}; if (idx !== keys.length - 1) current = current[key]; }); return obj; }, {}); // 使用示例 const inputStr = "myFunc user.name=Alice user.age=30 foo=bar"; myFunc(parseParams(inputStr)); // 参数对象:{ user: { name: "Alice", age: 30 }, foo: "bar" }
内容的提问来源于stack exchange,提问作者wololoo
相关产品推荐
相关产品推荐

