如何遍历对象数组,查找对象内数组属性中的指定字符串
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
相关产品推荐
相关产品推荐

