如何判断嵌套对象数组的changeFields中是否存在printLogs字段?
判断数组中是否存在含指定键的嵌套元素
你需要判断printObj数组里是否有任意对象的changeFields数组包含带printLogs键的元素,返回布尔值。先说说你之前代码的问题:
filter是用来筛选数组元素并返回新数组的,不是用来判断“是否存在”的,应该用some方法——它只要找到一个符合条件的元素就会终止遍历并返回true,效率更高。- 你的回调函数里没有返回值,导致
filter无法正确筛选;而且没处理changeFields不存在的情况(比如示例里最后一个空对象),直接访问会报错。
正确代码实现
const hasPrintLogs = printObj.some(item => { // 先跳过没有changeFields或不是数组的元素 if (!item.changeFields || !Array.isArray(item.changeFields)) { return false; } // 检查当前item的changeFields中是否有元素自身拥有printLogs键 return item.changeFields.some(field => field.hasOwnProperty('printLogs')); });
代码说明
- 外层
some遍历printObj的每个对象,只要有一个对象符合条件就停止遍历并返回true。 - 内层
some遍历当前对象的changeFields数组,用hasOwnProperty检查元素自身是否包含printLogs键(避免原型链上的属性干扰)。 - 加入了边界判断,防止访问不存在的
changeFields导致运行报错。
测试你提供的示例数据,这段代码会返回true,因为第二个对象的changeFields里存在带printLogs的元素。
内容的提问来源于stack exchange,提问作者myaubullion
相关产品推荐
相关产品推荐

