【问题标题】:javascript -- converting string to array of tuplesjavascript - 将字符串转换为元组数组
【发布时间】:2018-08-27 19:51:49
【问题描述】:

我有一个字符串要转换成数组

"[(6, 11), (12, 17), (18, 20)]"

.split() 不起作用(或者至少我不知道如何分隔单词)并且 JSON.parse 总是与 Uncaught SyntaxError: Unexpected token 一起出错

我是这样转换的:JSON.parse(THAT_GIVEN_LIST)

我做错了吗?如何将此字符串变成[(6, 11), (12, 17), (18, 20)]的漂亮列表

【问题讨论】:

  • 元组不是 JavaScript 中的数据结构。
  • 该格式不是 JSON,因此会出现 SyntaxError。您实际上打算创建什么对象结构?
  • [(6, 11), (12, 17), (18, 20)] in js 会变成[11, 17, 20] ;)
  • 我猜你想要的是[[6, 11], [12, 17], [18, 20]]
  • 是的。在那种情况下,JSON.parse(THAT_GIVEN_LIST) 就足够了

标签: javascript arrays json string tuples


【解决方案1】:

将您的输入格式设置为 python 列表,您可以通过以下方式进行:

'use strict';

const tuple = "[(6, 11), (12, 17), (18, 20)]";

const tupleToArray = JSON.parse(tuple
  .replace(/\(/g, '[')
  .replace(/\)/g, ']')
);

console.log(tupleToArray);

【讨论】:

    【解决方案2】:

    您使用的括号在语法上对于 JSON 不正确。你提出他们的意思是定义一个元组。但是,元组不是 JSON 原语。如果你想拥有这样的嵌套结构,最好的办法是使用嵌套数组:

    const a = "[[6, 11], [12, 17], [18, 20]]";
    const aa = JSON.parse(a);
    console.log(aa);
    
    aa.forEach(i => console.log(`first: ${i[0]}, second: ${i[1]}`));

    【讨论】:

    • 我明白了。所以元组不好。我将尝试改用[]
    【解决方案3】:

    使用JSON.parse() 获取二维数组。将出现的"(" 替换为"[",将")" 替换为"]"

    var arr = JSON.parse("[(6, 11), (12, 17), (18, 20)]".split("(").join("[").split(")").join("]"));
    
    console.log(arr);

    【讨论】:

    • 你不需要eval
    • @zero298:我猜是出于安全原因?我把它改成了JSON.parse()
    【解决方案4】:

    你可以像我在下面那样做。基本上我从原始字符串中删除了所有空格,然后使用正则表达式和split 将字符串放入数组中。最后,我使用另一个正则表达式和扩展运算符将map 格式化字符串转换为一个新数组:

    var s = "[(6, 11), (12, 17), (18, 20)]";
    
    function makeTuple(str) {
      return str
        .replace(/\s/g, "")
        .split("),(")
        .map(el => [...el.replace(/[\[()\]]/g, '').split(',')]);
    }
    
    console.log(makeTuple(s));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2020-12-23
      • 1970-01-01
      • 2017-04-30
      • 2013-02-12
      • 2016-01-03
      • 1970-01-01
      相关资源
      最近更新 更多