【问题标题】:How to find the array from the string? [duplicate]如何从字符串中找到数组? [复制]
【发布时间】:2021-09-19 18:01:48
【问题描述】:
const str = "[1,2,3,4],5,6";

const getArray = (str) => {
...
return arr;
}

console.log(getArray(str));  //[1,2,3,4]

[1,2,3,4] 是预期的数组。

我怎样才能得到这个?

【问题讨论】:

  • 到目前为止你尝试过什么?你在哪里卡住了?
  • 另外,数组是否总是应该只包含数字,或者您的输入字符串可能是,例如"lorem[1, a, true, { key: value }], ipsum, dolor, sit" 或类似的东西?
  • 请分享您的尝试。它有助于回答。
  • JSON.parse(str.match(/\[[^\]]+\]/g))

标签: javascript arrays json string


【解决方案1】:

您可以使用regex 提取由[] 包围的数字,然后运行map 进行清理。检查这个-

const str = "[1,2,3,4],5,6";

const getArray = str => {
    const regex = /(\[([^\]]+)\])/;
    const match = regex.exec(str);
    
    return match?.[2] ? match[2].split(',').map(x => x.trim()) : [];
}

console.log(getArray(str));

【讨论】:

    【解决方案2】:

    您可以使用 JavaScript 方法 lastIndexOf() 查找 []

    这将为您提供介于 [] 之间的所有字符。

    那么就可以使用split()方法来转换数组了。

    使用 map()Number 可以将字符串转换为数字

    const str = "[1,2,3,4],5,6";
    
    function getArray(str){
      var myArray = str.substring(
        str.lastIndexOf("[") + 1, 
        str.lastIndexOf("]")
      );
      return myArray.split(",").map(Number);
    
    }
    
    console.log(getArray(str));

    【讨论】:

      【解决方案3】:

      这将为您提供字符串中所有数组的数组。

      const str = "[1,2,3,4],5,6";
      
      const getArray = (str) => {
        const ans = []
        let stack = []
        let isStack = true
        for (let i = 0; i < str.length; i++) {
          if (str[i] == '[') {
            isStack = true;
          } else if (str[i] == ']') {
            isStack = false;
            ans.push(stack)
            stack = []
          } else if (isStack && str[i] != ',') {
            stack.push(parseInt(str[i]))
          }
        }
        return ans;
      }
      
      console.log(getArray(str)) // [ [ 1, 2, 3, 4 ] ]
      console.log(getArray(str)[0]) // [ 1, 2, 3, 4 ]

      【讨论】:

        【解决方案4】:

        假设 str 恰好包含一对封闭的方括号:

        const getArray = (str) => {
          const idxStart = str.indexOf('[') + 1
          const idxEnd = str.indexOf(']')
          arr = str.slice(idxStart, idxEnd)
          return arr.split(',')
        

        }

        【讨论】:

          【解决方案5】:

          您可以使用RegEx 匹配[] 中包含的字符串

          const str = "[1,2,3,4],5,6";
          
          const getArray = (str) => {
            arr = str.match('/\[.*\]/')[0]
            return arr;
          }
          
          console.log(getArray(str));

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-05-19
            • 2020-01-29
            • 1970-01-01
            • 2013-02-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多