代码之家  ›  专栏  ›  技术社区  ›  JChao

javascript-将字符串转换为元组数组

  •  -3
  • JChao  · 技术社区  · 6 年前

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

    .split() 不起作用(或者至少我不知道如何区分单词)JSON.parse解析总是与 Uncaught SyntaxError: Unexpected token

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

    我做错什么了吗?我该如何把这个字符串列成一个很好的列表 [(6, 11), (12, 17), (18, 20)]

    4 回复  |  直到 6 年前
        1
  •  2
  •   zero298    6 年前

    您使用的括号在语法上不适合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]}`));
        2
  •  3
  •   Jose Mato    6 年前

    'use strict';
    
    const tuple = "[(6, 11), (12, 17), (18, 20)]";
    
    const tupleToArray = JSON.parse(tuple
      .replace(/\(/g, '[')
      .replace(/\)/g, ']')
    );
    
    console.log(tupleToArray);
    
        3
  •  1
  •   Fullstack Guy    6 年前

    JSON.parse() 得到二维数组。替换的事件 "(" "[" ")" 具有 "]" .

    var arr = JSON.parse("[(6, 11), (12, 17), (18, 20)]".split("(").join("[").split(")").join("]"));
    
    console.log(arr);
        4
  •  0
  •   Tom O.    6 年前

    你可以像我在下面那样做。基本上我删除了原始字符串中的所有空白,然后使用regex和 split 将字符串放入数组中。最后我使用了另一个regex和spread运算符来 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));