吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 881|回复: 6
收起左侧

[求助] JS数据类型转换的问题

[复制链接]
cqwcns 发表于 2021-10-6 10:23
寡人有一个逗号分隔的字符串str,寡人需要将它转换为数组。
问题在于这里面很很多数字、布尔值或null,寡人要保留这些类型才可以。但split这个刁民把所有值都写成字符串。


众卿家有何良计?

[JavaScript] 纯文本查看 复制代码
    const str = 'this is str, 123,true,false, null'
    const data = str.split(',')

    for (const i in data) {
      console.log(`转换前:值为${data[i]},类型是${typeof (data[i])}`);
      // do some thing
      console.log(`转换后:值为${data[i]},类型是${typeof (data[i])}`);
    }

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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

emmm
字符串里本来就都是字符串啊。。。哪来的布尔啊数字啊。。。
除非去用正则表达式去判断,比如/true|false/.test就是布尔型,然后转换成对应的布尔型。
/\d+/.test就是数字
/null/.test就是null以此类推

花了几分钟写了一下,大概应该是楼主想要的结果吧,不够类型的自己向里面添加正则表达式的map就行

[JavaScript] 纯文本查看 复制代码
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);

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
cqwcns + 1 + 1 热心回复!
苏紫方璇 + 1 + 1 用心讨论,共获提升!

查看全部评分

 楼主| cqwcns 发表于 2021-10-6 10:47
查了一下JSON.parse可以利用一下,前面几个都可以直转,可惜str不行,直接报错。


[JavaScript] 纯文本查看 复制代码
    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'))

点评

多了解一些json的东西吧,,,这些东西是不是从哪里弄来的json?如果不是的话我目前没有想到更好的办法。  详情 回复 发表于 2021-10-6 10:48
涛之雨 发表于 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[0]))
涛之雨 发表于 2021-10-6 22:43
本帖最后由 涛之雨 于 2021-10-6 22:47 编辑
cqwcns 发表于 2021-10-6 17:18
我发现这样这能达到目的(结果符合需求), 大佬你觉得如何?

但是跟你最初的要求不一样啊。。。
你最初的是一串字符串,
而这个是一个字符串列表。
你自己看看有没有不一样的地方呢?
最简单的说,就是你这次这个是数组字符串,去掉单引号可以正常赋值。
但是你题目里的就是一个单纯的字符串,
当然,你应该也能想到,如果直接加上[]或者{}肯定也是会出错的。
当然我肯定会选择最简单的办法喽,但你的要求不能改啊。。。
不然任何的方法都没有可比性的

这种东西还需要自己体会区别

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 热心回复!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 21:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表