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

如何遍历对象数组,查找对象内数组属性中的指定字符串

JS遍历嵌套结构查找目标字符串实现方案

通用实现(返回匹配详情)

遍历外层数组的每个对象,再校验对象的所有属性是否为数组,最后在数组中匹配目标字符串即可,示例代码如下:

// 示例数据源
const deviceList = [
  {
    mouse: 'lenovo',
    teclado: 'dell',
    monitor: 'hp',
    headset: ['audioTechnica', 'klipXtreme', 'beats']
  },
  {
    mouse: 'razor',
    teclado: 'think pad',
    monitor: 'lg',
    headset: ['random', 'hyperx', 'jbl']
  },
  {
    mouse: 'technet',
    teclado: 'red dragon',
    monitor: 'benq',
    headset: ['sony', 'senheiser', 'toshiba']
  }
]

/**
 * 遍历嵌套结构查找目标字符串
 * @param {Array} data 待遍历的对象数组
 * @param {String} target 待查找的目标字符串
 * @returns {Array} 匹配结果列表
 */
function findTargetInArrayAttrs(data, target) {
  const matchResults = []
  data.forEach((obj, objIndex) => {
    // 遍历对象所有属性
    for (const attr in obj) {
      // 仅处理数组类型的属性
      if (Array.isArray(obj[attr])) {
        // 匹配到目标字符串则记录结果
        if (obj[attr].includes(target)) {
          matchResults.push({
            所属对象索引: objIndex,
            所在数组属性名: attr,
            数组内容: obj[attr]
          })
        }
      }
    }
  })
  return matchResults
}

// 测试查找'beats'
console.log(findTargetInArrayAttrs(deviceList, 'beats'))

运行后输出如下:

[
  {
    "所属对象索引": 0,
    "所在数组属性名": "headset",
    "数组内容": ["audioTechnica", "klipXtreme", "beats"]
  }
]

简化实现(仅判断是否存在)

如果只需要判断目标字符串是否存在,不需要返回详情,可以用更简洁的写法,匹配到结果后会提前终止遍历,性能更高:

const isExist = deviceList.some(obj => 
  Object.values(obj).some(val => Array.isArray(val) && val.includes('beats'))
)
console.log(isExist) // 输出 true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:36:04