JS数据类型转换的问题
寡人有一个逗号分隔的字符串str,寡人需要将它转换为数组。问题在于这里面很很多数字、布尔值或null,寡人要保留这些类型才可以。但split这个刁民把所有值都写成字符串。
众卿家有何良计?
const str = 'this is str, 123,true,false, null'
const data = str.split(',')
for (const i in data) {
console.log(`转换前:值为${data},类型是${typeof (data)}`);
// do some thing
console.log(`转换后:值为${data},类型是${typeof (data)}`);
} 本帖最后由 涛之雨 于 2021-10-6 10:47 编辑
emmm
字符串里本来就都是字符串啊。。。哪来的布尔啊数字啊。。。
除非去用正则表达式去判断,比如/true|false/.test就是布尔型,然后转换成对应的布尔型。
/\d+/.test就是数字
/null/.test就是null以此类推
花了几分钟写了一下,大概应该是楼主想要的结果吧,不够类型的自己向里面添加正则表达式的map就行
const regMap = [{
type: "number",
reg: /\d+/
}, {
type: "boolean",
reg: /true|false/
}, {
type: "null",
reg: /null/
}, {
type: "undefined",
reg: /undefined/
}], str = "this is str, 123,true,false, null", data = str.split(",").map(e => e.trim()).map(e => {
for (const r of regMap)
if (r.reg.test(e)) switch (r.type) {
case "number":
return Number(e);
case "boolean":
return "true" === e;
case "null":
return null;
case "undefined":
return;
}
});
console.log(data);
查了一下JSON.parse可以利用一下,前面几个都可以直转,可惜str不行,直接报错。
console.log('true')
console.log('false')
console.log('null')
console.log('123')
console.log('str')
console.log(JSON.parse('true'))
console.log(JSON.parse('false'))
console.log(JSON.parse('null'))
console.log(JSON.parse('123'))
console.log(JSON.parse('str')) 本帖最后由 涛之雨 于 2021-10-6 10:51 编辑
cqwcns 发表于 2021-10-6 10:47
查了一下JSON.parse可以利用一下,前面几个都可以直转,可惜str不行,直接报错。
多了解一些json的东西吧,,,这些东西是不是从哪里弄来的json?如果不是的话我目前没有想到更好的办法。
json的格式和规范
https://www.runoob.com/json/json-syntax.html
但是我个人感觉如果把这个拼凑成json然后解析还不如直接手动正则表达式去test 受教 ,谢谢 涛之雨 发表于 2021-10-6 10:48
多了解一些json的东西吧,,,这些东西是不是从哪里弄来的json?如果不是的话我目前没有想到更好的办法。 ...
我发现这样这能达到目的(结果符合需求), 大佬你觉得如何?
let str = '["str","str123",123,true,false,null]'
let arr = str.split()
console.log(JSON.parse(arr)) 本帖最后由 涛之雨 于 2021-10-6 22:47 编辑
cqwcns 发表于 2021-10-6 17:18
我发现这样这能达到目的(结果符合需求), 大佬你觉得如何?
但是跟你最初的要求不一样啊。。。
你最初的是一串字符串,
而这个是一个字符串列表。
你自己看看有没有不一样的地方呢?
最简单的说,就是你这次这个是数组字符串,去掉单引号可以正常赋值。
但是你题目里的就是一个单纯的字符串,
当然,你应该也能想到,如果直接加上[]或者{}肯定也是会出错的。
当然我肯定会选择最简单的办法喽,但你的要求不能改啊。。。
不然任何的方法都没有可比性的
https://p.pstatp.com/origin/pgc-image/010922ff221f479a80284c670baa750c
这种东西还需要自己体会区别
页:
[1]