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

如何使用Lodash验证子数组是否存在于父数组中?

问题分析与解决方案

你遇到的这个问题,核心原因是JavaScript里数组属于引用类型——哪怕两个数组内容完全一样,它们也是不同的内存引用,而Lodash的_.includes、_.find、_.findIndex默认采用严格相等(===)来匹配元素,所以直接传el是匹配不到的。

举个直观的例子就能明白:

[1] === [1] // false,因为是两个独立的内存引用

下面给你几个可行的解决方法:

方法1:用_.some配合_.isEqual做深度匹配

_.isEqual是Lodash专门用来做深度相等比较的方法,能准确判断两个数组/对象的内容是否一致,结合_.some可以快速检查父数组中是否存在匹配的子数组:

let arr = [[1],[2],[3]];
let el = [1];
_.some(arr, item => _.isEqual(item, el)); // 返回true

方法2:给_.find/_.findIndex传入自定义比较函数

原来直接传el会让Lodash用严格相等去匹配,改成传入一个自定义比较函数,用_.isEqual判断内容即可:

// 使用_.find找到匹配的子数组
_.find(arr, item => _.isEqual(item, el)); // 返回[1]

// 使用_.findIndex找到匹配元素的下标
_.findIndex(arr, item => _.isEqual(item, el)); // 返回0

补充:为什么原来的写法会失败?

再回顾你最初的代码:

let arr = [[1],[2],[3]];
let el = [1];
_.includes(arr, el) // false
_.find(arr, el) // undefined
_.findIndex(arr, el) // -1

当你把el作为第二个参数传给这些方法时,Lodash会默认用===去匹配数组元素,而el和arr里的[1]是两个不同的引用,自然匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:53:05