You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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), {}));

逻辑说明

  1. inputStr.split(" ").slice(1):拆分字符串后跳过第一个函数名字段,得到所有键值对字符串数组
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:55:33