【问题标题】:Javascript:将字符串转换为字符串数组
【发布时间】:2022-01-23 16:03:18
【问题描述】:

我有 javascript 类型的字符串 -

"[
 'abc',
 'def',
 'ghi'
]"

以上示例为字符串类型。我想把它转换成数组对象 -> 字符串数组 ->

[
'abc',
     'def',
     'ghi'
]

我尝试使用 map 函数 - array.map(strArray,string) 但出现语法错误,因为 strArray 本身不是数组,而是它的字符串。

【问题讨论】:

  • 您可以控制输入字符串吗?如果你能把它转换成这个:["abc","def","ghi"],你就可以JSON.parse()
  • JSON.parse(foo.replaceAll("'",'"'))

标签: javascript arrays


【解决方案1】:

如果字符串是根据 JavaScript 的有效字符串(引号正确转义,由反引号、单引号、双引号等分隔),您可以 eval 字符串化数组。

arrayOfStrings = eval(strArray);

这会将字符串计算为 JavaScript 表达式。请注意,eval 函数有时不受欢迎,因为它可能会导致误解。

如果你的字符串化数组是一个有效的 JSON 字符串,你可以 JSON.parse 代替它:

arrayOfStrings = JSON.parse(strArray);

此方法的适用性有一些限制;例如,字符串必须用双引号分隔,因为这是正确的 JSON 格式。还有其他限制。

对于非常非常一般的情况(例如,如果您的数组不使用引号:[abc, blah blah, cd]),您将需要捕获字符串。假设字符串不包含逗号,您可以这样做:

const parseStringArray = l => l.replace(/\n|\[|\]/g, '').split(',')

此解决方案做了以下假设:字符串不包含逗号(见上文),不包含换行符,不包含方括号,用逗号分隔,字符串化列表格式如下:

<open square brace><zero or more newlines><zero or more of (<string which can contain any character except comma, newline, open square brace or close square brace><zero or more newlines>)><close square brace>

(抱歉,我对正则表达式不是很熟悉,但如果有人可以为我提供正则表达式,那将非常有帮助。)

【讨论】:

    【解决方案2】:
    let x = "[1,2,3]"
    
    x = JSON.parse(x)
    

    【讨论】:

    • 是的,JSON.parse() 在字符串格式正确时有效。不过,问题中的字符串并非如此。
    猜你喜欢
    • 2022-11-29
    • 2011-06-18
    • 2020-12-23
    • 1970-01-01
    • 2017-11-27
    • 2018-03-08
    相关资源
    最近更新 更多