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

JS匹配嵌套data数组键名与fields值,筛选对应键值对

问题排查与解决方案

原代码错误点

  • 结构识别错误:data的每个子项是[标题字符串, 属性对象]的二元数组,你直接对data[i]执行filter操作完全不符合数据结构逻辑,遍历拿到的元素没有fields属性,所以会报错返回undefined
  • 匹配逻辑错误:需求是提取属性对象中键名存在于fields的键值对,而非判断属性对象的所有键都在fields里,逻辑方向完全错误
  • 结果收集错误:每次循环都重新声明results变量,没有累积匹配结果,最终无法得到完整的输出数组

正确实现代码

JavaScript版本

const results = []
for (const item of data) {
  const [title, props] = item
  const matched = {}
  // 筛选属性对象中键名在fields里的键值对
  for (const key in props) {
    if (fields.includes(key)) {
      matched[key] = props[key]
    }
  }
  // 有匹配结果才推入结果数组
  if (Object.keys(matched).length > 0) {
    results.push([title, matched])
  }
}
console.log(results)

函数式简写版本

const results = data.reduce((res, [title, props]) => {
  const matched = Object.fromEntries(
    Object.entries(props).filter(([key]) => fields.includes(key))
  )
  return Object.keys(matched).length ? [...res, [title, matched]] : res
}, [])

逻辑说明

  • 遍历data所有子项,拆分出标题和对应的属性对象
  • 对每个属性对象,遍历所有键值对,筛选出键名存在于fields数组的项,组成新的匹配对象
  • 仅当匹配对象非空时,将标题+匹配对象的组合推入最终结果数组
  • 最终得到的results完全符合预期输出结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:36:04