You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何扁平化带有大量转义字符的字符串化嵌套数组?

如何高效扁平化深度嵌套的字符串化数组并移除转义字符?

你的需求是把多层转义嵌套的字符串化数组,转换成一维数组并清除所有转义字符,最终得到["foo"]这类结果。下面是两种高效实现方案,优先推荐原生API组合的方式:

最优方案:循环解析+原生扁平化

利用JSON.parse自动处理转义的特性,逐层解开嵌套的字符串包裹,再用flat(Infinity)一键扁平化任意深度的数组。原生API的性能远高于手动处理转义,适合大型字符串场景。

const original = "[\"[\"[\\\"[\\\\\"[\\\\\\\\\"[\\\\\\\\\\\\\\\"[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"foo\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"]\\\\\\\\\\\\\\\"]\\\\\\\"]\\\"]\"]\"]\"]";

function flattenEscapedNestedArray(str) {
  let current = str;
  // 循环解析直到拿到数组类型
  while (typeof current === 'string') {
    try {
      current = JSON.parse(current);
    } catch (err) {
      break; // 解析失败时终止,避免死循环
    }
  }
  // 扁平化任意深度的嵌套数组
  return current.flat(Infinity);
}

const result = flattenEscapedNestedArray(original);
console.log(result); // 输出 ["foo"]

方案说明

  1. 转义处理:JSON.parse会自动识别并处理字符串中的转义字符,每次解析都会解开一层嵌套的字符串包裹,直到得到真正的数组结构。
  2. 扁平化:flat(Infinity)是ES2019新增的API,能直接将任意深度的嵌套数组扁平化为一维数组,代码简洁且性能优化到位。
  3. 容错处理:添加try-catch防止输入字符串格式不合法导致的解析错误,避免程序崩溃。

备选方案:递归解析(自定义场景)

如果需要对每一层解析结果做自定义处理,递归方式更灵活。但要注意极深嵌套可能触发调用栈溢出(多数现代引擎已优化栈深度,一般场景无需担心)。

function parseAndFlatten(str) {
  // 非字符串类型直接处理
  if (typeof str !== 'string') {
    return Array.isArray(str) ? str.flat(Infinity) : [str];
  }
  try {
    const parsed = JSON.parse(str);
    return parseAndFlatten(parsed);
  } catch (err) {
    // 解析失败则将当前字符串作为数组元素返回
    return [str];
  }
}

const result = parseAndFlatten(original);
console.log(result); // 输出 ["foo"]

方案说明

递归会逐层尝试解析字符串,直到无法解析为止,再对最终得到的数组做扁平化处理。适合需要在解析过程中插入自定义逻辑的场景,比如过滤特定元素、修改值等。

内容的提问来源于stack exchange,提问作者Ty Sabs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:12:54