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

如何用Lodash检查对象的键/值是否匹配指定字符串数组?

使用Lodash检查对象所有值/键是否存在于数组中的简洁方法

先明确给定的变量:

const acceptableColors = ['PURPLE', 'BLUE', 'RED', 'GREEN']
const primaryColors = {
  RED: 'RED',
  BLUE: 'BLUE',
  GREEN: 'GREEN',
}

一、检查对象所有值是否都在数组中

有两种简洁的实现方式:

  1. 用_.every + _.includes组合
const containsAllValues = (obj, arr) => _.every(_.values(obj), val => _.includes(arr, val));

// 调用验证
console.log(containsAllValues(primaryColors, acceptableColors)); // 输出 true

逻辑很直接:先提取对象的所有值,再逐个检查是否都被数组包含,_.every会在所有元素满足条件时返回true。

  1. 用_.intersection对比长度
const containsAllValues = (obj, arr) => {
  const objValues = _.values(obj);
  // 取对象值数组和目标数组的交集,若交集长度和原数组一致,说明所有值都存在
  return _.intersection(objValues, arr).length === objValues.length;
};

二、检查对象所有键是否都在数组中

只需要把提取值的_.values换成提取键的_.keys即可,逻辑和上面完全一致:

  1. _.every + _.includes版本
const containsAllKeys = (obj, arr) => _.every(_.keys(obj), key => _.includes(arr, key));
  1. _.intersection对比长度版本
const containsAllKeys = (obj, arr) => {
  const objKeys = _.keys(obj);
  return _.intersection(objKeys, arr).length === objKeys.length;
};

关于你现有代码的问题

你写的函数逻辑存在两处错误:

  • _.has的作用是检查对象是否包含某个属性,不是用来判断数组是否包含元素的,用在这里完全不对;
  • _.every的用法有误,它需要接收一个数组和判断函数,你直接把_.every的结果传给_.has,完全不符合API的使用规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:55:10