js如何实现将'a=b'格式的字符串与键值对的相互转换?

作者站长头像
站长
· 阅读数 8

js如何实现将'a=b'格式的字符串与键值对的相互转换?项目里有一个地方要求用户填写的动参,原始格式为形如

"key1=value1key2=value2key3=value3"

的字符串但是在接口提交时,需要将其转换为键值对{ key1: value1, key2: value2, key3: value3 }然后从后台获取到这样的键值对时,在页面中要转换成原始格式的字符串用于回显。想询问一下原生js有没有直观好用的方法把数据在这两种结构间相互转化

const originData = 'key1=value1\nkey2 =value2\n\nkey3==value3\nkey4'
let resquestData = Object.assign({}, ...originData.split('\n').map(item => {
  if (item && item.includes('=')) {
    let arr = item.split('=')
    return { [arr[0].trim()]: arr[1]?.trim() }
  }
}))
let displayData = Object.keys(resquestData).map((item, index) => {
  return `${item}=${Object.values(resquestData)[index]}`
}).join('\n')

js如何实现将'a=b'格式的字符串与键值对的相互转换?上述代码是目前我的实现方法但是有几个比较明显的问题,首先是我个人感觉可读性非常差;其次是虽然对原始数据的一些错误格式进行了一定的处理,但是总感觉这么复杂的表达式,在面对一些意料外的输入时可能会导致报错从而导致页面的功能异常。在此询问一下是否有可替代的更优解

回复
1个回答
avatar
test
2024-07-02

模拟输入数据

const rawData = [
    "key1=value1",
    "key2=value2",
    "key3=value3"
].join("\n");

转成对象,再处理成 JSON

const obj = Object.fromEntries(
    rawData.split(/[\r\n]+/)
        .map(line => line.split("="))
);

const json = JSON.stringify(obj);
console.log(json);
// {"key1":"value1","key2":"value2","key3":"value3"}

把 JSON 转换回来(解析成对象再处理成文本)

const text = Object.entries(JSON.parse(json))
    .map(([key, value]) => `${key}=${value}`)
    .join("\n");

console.log(text);

// key1=value1
// key2=value2
// key3=value3
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容