如何将用户输入的类数组格式字符串转换为数字组成的二维数组
方案1:便捷安全的JSON解析方案
你拿到的输入字符串本身完全符合JSON数组元素的格式规范,只需要在外层补一组方括号,就可以直接用JSON.parse解析为标准数字二维数组,不需要复杂的字符串拆分处理:
// 假设inputStr是从输入框读取到的原始字符串 const inputStr = '[2, 2, 2, 2, 2, 9, 9, 9, 2, 2, 2],\n[2, 1, 1, 1, 1, 9, 9, 9, 1, 1, 2],\n[2, 1, 1,14, 1, 9, 9, 9, 1, 1, 2]' // 外层补方括号后直接解析 const result = JSON.parse(`[${inputStr}]`)
解析完成后的result就是符合要求的数字类型二维数组,不需要额外做类型转换。该方案安全性有保障,JSON.parse只会解析合法JSON格式,不会执行任意代码,无需担心注入风险。
方案2:禁用JSON.parse场景下的正则处理方案
如果你的业务场景不允许直接使用JSON.parse,可以用正则匹配所有方括号包裹的数组片段,再逐个拆分转换为数字:
const inputStr = '[2, 2, 2, 2, 2, 9, 9, 9, 2, 2, 2],\n[2, 1, 1, 1, 1, 9, 9, 9, 1, 1, 2],\n[2, 1, 1,14, 1, 9, 9, 9, 1, 1, 2]' // 匹配所有被中括号包裹的数组字符串片段 const arrStrList = inputStr.match(/\[([\d,\s]+)\]/g) || [] const result = arrStrList.map(str => { // 移除方括号、按逗号拆分、过滤空值后统一转为数字类型 return str.replace(/\[|\]/g, '') .split(',') .filter(item => item.trim()) .map(numStr => Number(numStr.trim())) })
两种方案都可以直接适配你给出的输入格式,输出符合要求的数字二维数组。
内容的提问来源于stack exchange,提问作者violetorigin
相关产品推荐
相关产品推荐

