将字符串中的 + 替换为 space
Replace a + with a space in a string
我有一个 Typescript 项目,我正在将 URL 参数转换为 JSON 对象。
问题是值与“+”连接,如何用 space 替换此符号?
这是URL:
let paramUrl = 'type=MERCEDES+BENZ'
我就是这样做的:
let replace = JSON.parse('{"' + paramUrl.replace(/&/g, '","').replace(/=/g,'":"') + '"}', function(key, value) { return key===""?value:decodeURIComponent(value) })
就是这样 returns:
{type: "MERCEDES+BENZ"}
这是我需要的:
{type: "MERCEDES BENZ"}
无论你的转换是否有意义,你都可以这样转换你的结果:
const replace = {type: "MERCEDES+BENZ"}
const replacedReplace = JSON.parse(JSON.stringify(replace).replace('+', ' '))
console.log(replacedReplace)
或者直接操作数值:
let replace = {type: "MERCEDES+BENZ"}
replace.type=replace.type.replace('+',' ')
console.log(replace)
除非您非常熟悉正则表达式,否则我强烈建议您不要在这种情况下使用它们。事实上,与仅使用可用的 JavaScript API 将 url 搜索参数字符串转换为普通对象相比,这里对字符的任何类型的显式操作都将更难调试和维护。
这是我建议您继续的方式,假设您的 JS 运行时同时具有 the URLSearchParams
constructor and the Object.fromEntries()
method:
let paramUrl = 'type=MERCEDES+BENZ'
const replace = Object.fromEntries(new URLSearchParams(paramUrl));
console.log(replace) // { "type": "MERCEDES BENZ" }
这本质上是一个 one-liner,它首先将您的 paramUrl
字符串转换为表示字符串 key-value 对列表的对象,然后将这些 key-value 对转换为普通对象。您不负责维护或实施 URLSearchParams
或 Object.fromEntries()
;你只需要使用或填充它们(例如,this polyfill for URLSearchParams
)。
请注意,如果您的搜索参数字符串对同一个键有多个值(例如,foo=bar&foo=baz
),您最终只会得到后一个值,但如果需要,您可以处理它通过从 Object.fromEntries()
切换到更多自定义迭代。
试试这个
let paramUrl = 'type=MERCEDES+BENZ';
let arr=paramUrl.replaceAll("+"," ").split("=");
let obj={[arr[0]]:arr[1]}; // {type: "MERCEDES BENZ"}
或一行
let obj= paramUrl.replaceAll("+"," ").split("=")
.reduce( (key,value) => { return { [key] : value}; } ); // {type: "MERCEDES BENZ"}
我有一个 Typescript 项目,我正在将 URL 参数转换为 JSON 对象。
问题是值与“+”连接,如何用 space 替换此符号?
这是URL:
let paramUrl = 'type=MERCEDES+BENZ'
我就是这样做的:
let replace = JSON.parse('{"' + paramUrl.replace(/&/g, '","').replace(/=/g,'":"') + '"}', function(key, value) { return key===""?value:decodeURIComponent(value) })
就是这样 returns:
{type: "MERCEDES+BENZ"}
这是我需要的:
{type: "MERCEDES BENZ"}
无论你的转换是否有意义,你都可以这样转换你的结果:
const replace = {type: "MERCEDES+BENZ"}
const replacedReplace = JSON.parse(JSON.stringify(replace).replace('+', ' '))
console.log(replacedReplace)
或者直接操作数值:
let replace = {type: "MERCEDES+BENZ"}
replace.type=replace.type.replace('+',' ')
console.log(replace)
除非您非常熟悉正则表达式,否则我强烈建议您不要在这种情况下使用它们。事实上,与仅使用可用的 JavaScript API 将 url 搜索参数字符串转换为普通对象相比,这里对字符的任何类型的显式操作都将更难调试和维护。
这是我建议您继续的方式,假设您的 JS 运行时同时具有 the URLSearchParams
constructor and the Object.fromEntries()
method:
let paramUrl = 'type=MERCEDES+BENZ'
const replace = Object.fromEntries(new URLSearchParams(paramUrl));
console.log(replace) // { "type": "MERCEDES BENZ" }
这本质上是一个 one-liner,它首先将您的 paramUrl
字符串转换为表示字符串 key-value 对列表的对象,然后将这些 key-value 对转换为普通对象。您不负责维护或实施 URLSearchParams
或 Object.fromEntries()
;你只需要使用或填充它们(例如,this polyfill for URLSearchParams
)。
请注意,如果您的搜索参数字符串对同一个键有多个值(例如,foo=bar&foo=baz
),您最终只会得到后一个值,但如果需要,您可以处理它通过从 Object.fromEntries()
切换到更多自定义迭代。
试试这个
let paramUrl = 'type=MERCEDES+BENZ';
let arr=paramUrl.replaceAll("+"," ").split("=");
let obj={[arr[0]]:arr[1]}; // {type: "MERCEDES BENZ"}
或一行
let obj= paramUrl.replaceAll("+"," ").split("=")
.reduce( (key,value) => { return { [key] : value}; } ); // {type: "MERCEDES BENZ"}