cqwcns 发表于 2021-10-6 10:23

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:32

本帖最后由 涛之雨 于 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);

cqwcns 发表于 2021-10-6 10:47

查了一下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:48

本帖最后由 涛之雨 于 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

cqwcns 发表于 2021-10-6 16:40

受教 ,谢谢

cqwcns 发表于 2021-10-6 17:18

涛之雨 发表于 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:43

本帖最后由 涛之雨 于 2021-10-6 22:47 编辑

cqwcns 发表于 2021-10-6 17:18
我发现这样这能达到目的(结果符合需求), 大佬你觉得如何?



但是跟你最初的要求不一样啊。。。
你最初的是一串字符串,
而这个是一个字符串列表。
你自己看看有没有不一样的地方呢?
最简单的说,就是你这次这个是数组字符串,去掉单引号可以正常赋值。
但是你题目里的就是一个单纯的字符串,
当然,你应该也能想到,如果直接加上[]或者{}肯定也是会出错的。
当然我肯定会选择最简单的办法喽,但你的要求不能改啊。。。
不然任何的方法都没有可比性的
https://p.pstatp.com/origin/pgc-image/010922ff221f479a80284c670baa750c
这种东西还需要自己体会区别
页: [1]
查看完整版本: JS数据类型转换的问题