【问题标题】:How to turn Javascript object value into array when the value is wrapped in quotes?当值用引号括起来时,如何将Javascript对象值转换为数组?
【发布时间】:2021-05-28 19:51:37
【问题描述】:

如何将这个作为字符串的 javascript 对象值转换为数组,删除外部引号,只留下括号?尝试使用obj["text-font"] = obj["text-font"].split('"').join(""); 不成功。

当前

text-font: "['Open Sans Regular', 'Arial Unicode MS Regular']"

打算

text-font: ['Open Sans Regular', 'Arial Unicode MS Regular']

【问题讨论】:

  • 如果您的字符串是有效的 JSON(带双引号,而不是单引号)会更容易。然后你可以这样做:JSON.parse(str)
  • 你为什么使用split('"')?字符串中没有" 字符。
  • 这是从哪里来的?也许您可以修复源以生成普通数组或有效 JSON,而不是这种非标准格式。
  • @Barmar 返回并修复了源,发送了一个字符串,其中项目用逗号分隔,然后使用 obj["text-font"].split(", ");感谢您的建议

标签: javascript javascript-objects


【解决方案1】:

如果您知道字符串中除了分隔字体名称的引号之外没有其他引号,则可以将它们转换为双引号,然后使用JSON.parse() 将其转换为数组。

obj['text-font'] = JSON.parse(obj['text-font'].replace(/'/g, '"'));

【讨论】:

    【解决方案2】:

    您可以将单引号替换为双引号,然后使用 JSON.parse() 将其转换为实际的字符串数组。

    obj["text-font"] = JSON.parse(obj["text-font"].replaceAll("'",'"'))
    

    查看此处了解更多信息: MDN Web Docs: JSON.parse()

    【讨论】:

    • 问题是数组元素在单括号'而不是双括号"之间,这就是JSON.parse不起作用的原因. 在回复之前测试您的解决方案是一个很好的措施,这样您将来可以提供更好的答案!
    • 你是对的。感谢cmets。我现在已经纠正了这个错误。
    【解决方案3】:

    也许使用eval() ** 虽然要注意安全问题,见下文

    let obj = {
      "text-font": "['Open Sans Regular', 'Arial Unicode MS Regular']"
    }
    
    console.log(eval(obj['text-font']))
    
    // to fix the object
    
    obj['text-font'] = eval(obj['text-font']);
    console.log(obj)

    eval() has security risks 和恶意用户可以使用浏览器内调试器通过XSS attacks 执行自己的javascript - 一般建议不要鲁莽使用它。

    【讨论】:

    • 至少在回答中提及 eval 的缺点和安全漏洞之前包含一个横幅!
    • @FZs - 好点,完成。如果需要,请随时详细说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2018-09-11
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多