如何用Lodash isEqual()比较单个对象属性与数组中所有同名属性
解决方案
Lodash完全支持你的需求,不需要手动编写循环或递归逻辑,以下是两种简洁高效的实现方式:
推荐方式:使用_.some(短路遍历,性能更优)
_.some会遍历数组,一旦找到符合条件的元素就立即停止遍历并返回true,非常适合处理大型数组:
// 若找到匹配项,终止外层函数 if (_.some(rssDataFileArr, { itemURL: feedItem.link })) { return; }
逻辑说明:
- 第二个参数传入
{ itemURL: feedItem.link },Lodash会自动检查数组中是否存在对象的itemURL属性值等于feedItem.link。 - 匹配到目标元素(示例中数组的第二个对象)时,直接返回
true触发守卫子句。
备选方式:提取属性后用_.includes检查
如果需要复用提取后的属性数组,可以先通过_.map提取所有itemURL值,再用_.includes判断是否存在匹配:
// 提取数组中所有对象的itemURL属性值 const allItemUrls = _.map(rssDataFileArr, 'itemURL'); // 判断目标链接是否在列表中 if (_.includes(allItemUrls, feedItem.link)) { return; }
注意:这种方式需要先遍历整个数组生成属性列表,对于超大型数组,性能略逊于_.some。
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

