JavaScript中如何将数组格式字符串转换为真实嵌套数组?
JS/React 数组格式字符串转嵌套数组实现方案
问题原因
直接使用string.split(",")失效的核心原因是:待处理字符串中同时存在两类逗号——子数组之间的分隔逗号、子数组内部IP与端口值的分隔逗号,简单按逗号全局拆分无法区分两类逗号的作用,最终会把子数组拆成零散的独立元素,无法得到预期的嵌套结构。
最优实现方案
你的原始字符串本质是缺失最外层中括号的标准JSON数组格式内容,只需要补全外层括号后直接调用原生JSON.parse即可得到结构完全符合预期的嵌套数组,React环境下可直接使用:
// 原始待转换字符串 const rawString = `[" 103.116.32.2",1225],[" 163.53.79.51",677],[" 103.116.32.30",651],[" 103.116.32.1",174],[" 10.6.27.6",40],[" 184.26.162.104",36],[" 184.26.162.97",35],[" 10.57.10.88",27],[" 172.16.59.56",24],[" 8.8.4.4",22],[" 103.116.32.26",18],[" 8.8.8.8",17],[" 103.116.32.14",16],[" 192.168.180.5",14],[" 216.239.35.0",10],[" 10.6.24.135",9]`; // 补全外层中括号后解析 const newArray = JSON.parse(`[${rawString}]`);
该方案的优势:
- 解析结果完全匹配预期嵌套结构,不会出现拆分错误
- 原生API实现,无第三方依赖,执行效率高
- 自动保留原始值类型:IP为字符串类型、端口号为数字类型,不需要额外做类型转换,也会完整保留IP前的原始空格
不规范格式兜底方案
如果原始字符串存在非标准JSON格式(比如使用单引号、存在多余尾逗号)导致
JSON.parse报错,可以通过正则匹配所有子数组块后逐个解析:
const newArray = []; // 匹配所有[开头、]结尾的子数组片段 const subArrayMatch = rawString.match(/\[[^\]]+\]/g); if (subArrayMatch) { subArrayMatch.forEach(subItemStr => { // 若存在单引号等不规范格式,可在此处做替换处理后再解析 newArray.push(JSON.parse(subItemStr.replace(/'/g, '"'))); }); }
内容的提问来源于stack exchange,提问作者utpalbalse
相关产品推荐
相关产品推荐

