You need to enable JavaScript to run this app. JavaScript如何从嵌套键值对数组合成完整姓名字符串数组
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何从嵌套键值对数组合成完整姓名字符串数组

嵌套数组姓名提取实现

为什么之前递归的写法输出不对

你之前的递归没有做层级边界判断:最外层数组的每一个子项,对应最终结果里的一条完整姓名字符串。你写的递归碰到拆到的原始字符串值(比如Mary、Jenkins)就直接往最终数组里塞,没等同一条记录的所有姓名片段收集完就提前推值,自然就得到了把所有值拆碎的扁平数组。

固定结构极简实现

你给出的数组层级是完全固定的,根本不需要上递归,几行代码就能搞定:

const result = list.map(record => 
  // 单条记录里的所有键值对,直接取第二个元素的值,空格拼接后就是完整姓名
  record.map(([, val]) => val).join(' ')
)

运行输出为['Mary Jenkins', 'Kim', 'Joe'],和你期望的结构完全匹配。

通用递归实现(适配未知嵌套深度)

如果需要兼容不确定嵌套层级的通用结构,递归逻辑一定要加单条记录的识别规则,不能无差别拆所有值:

  • 遍历当前层的每个元素,先判断当前层是不是单条用户记录:也就是层内所有子元素都是[字段名, 字段值]格式的二元数组
  • 确认是单条记录后,把这条记录里的所有字段值拼接成完整字符串推入最终结果,不再继续向下拆分
  • 如果当前层还是记录集合(子元素也是数组),就继续递归遍历每个子元素
function extractNames(source) {
  const res = []
  for (const item of source) {
    // 单条记录结构判断
    const isRecord = Array.isArray(item)
      && item.length > 0
      && item.every(sub => Array.isArray(sub) && sub.length === 2 && typeof sub[0] === 'string')
    
    if (isRecord) {
      res.push(item.map(kv => kv[1]).join(' '))
    } else if (Array.isArray(item)) {
      res.push(...extractNames(item))
    }
  }
  return res
}

const result = extractNames(list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 19:45:07