判断数组是否包含对象,需区分引用相等(相同内存地址)与内容相等(逐字段比对)。引用相等可用includes或indexOf;内容相等需用some或any按字段匹配。避免直接传入新对象字面量、JSON.stringify或Python字典默认深比较等误区。
判断数组是否包含某个对象,听起来简单,但实际写代码时很容易踩坑。核心问题在于:对象是引用类型,即便两个对象内容一模一样,只要不是同一个内存地址,includes() 或 in 这类基于值或引用相等的方法就会直接返回 false。因此,首先要明确你要找的是“同一个对象”还是“内容相同的对象”。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
这是整个判断的逻辑起点:
arr.includes(obj) 或 arr.indexOf(obj) !== -1 可以准确返回 true。{id: 1, name: 'Alice'} 和另一个同样内容的对象)。此时不能依赖引用相等,必须逐字段比对。适用场景:你手头有原始对象引用,想确认它是否还在数组里。
includes() 或 indexOf() 即可。is 比较,但更常见的方式是手动遍历——因为 Python 列表的 in 默认基于 ==,而非 is。若要引用相等,需写 any(item is target_obj for item in arr)。这才是日常开发中的高频需求,比如查找用户 ID 为 100 的对象:
some() 配合结构化判断:arr.some(item => item.id === 100 && item.name === 'Alice')arr.some(item => item.id === target.id)any():any(item['id'] == 100 for item in arr)(列表含字典时)__eq__ 方法后,直接用 target_obj in list。以下做法要么无效,要么存在隐患:
includes({id: 1}) —— 永远返回 false,除非传入的就是原对象引用。JSON.stringify(a) === JSON.stringify(b) 做深比较 —— 字段顺序敏感,且不支持函数、undefined、Date 等类型,只适合简单的纯数据对象。target_dict in list_of_dicts —— 它实际调用 ==,但字典的默认比较是深比较,性能较差,还可能触发递归或不可哈希错误。侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述