JavaScript中如何对比两个数组 校验对象keyName值是否在另一数组内
JavaScript 数组key值校验实现
你可以直接基于数组原生方法实现该校验逻辑,无需引入额外工具库。
核心实现
核心逻辑分两步:遍历arr2中的每一个对象,取出对象的keyName属性值,判断该值是否存在于arr1的元素列表中。
如果你的校验规则是arr2中所有对象的keyName都必须包含在arr1内才算校验通过,可以参考以下代码:
// 定义基础数组 const arr1 = ["empid", "Name"]; const arr2 = [{"keyName": "empid", "keyValue": "2"}]; // 校验函数 const checkKeyValid = (validKeyList, targetList) => { return targetList.every(item => validKeyList.includes(item.keyName)); }; // 执行校验,返回布尔值结果 const isPass = checkKeyValid(arr1, arr2); console.log(isPass); // 示例数据运行后返回true
场景适配
- 如果校验规则是arr2中只要有任意一个对象的keyName存在于arr1内就算通过,只需要把代码里的
every替换为some即可:
const checkKeyHasMatched = (validKeyList, targetList) => { return targetList.some(item => validKeyList.includes(item.keyName)); };
- 如果需要筛选出arr2里所有不符合规则的非法项,可以用
filter实现:
// 返回所有keyName不在arr1中的对象集合 const invalidItems = arr2.filter(item => !arr1.includes(item.keyName));
- 如果需要兼容IE等不支持
includes方法的老旧环境,可以把includes判断替换为indexOf写法:
// 老旧环境兼容写法 const checkKeyValid = (validKeyList, targetList) => { return targetList.every(item => validKeyList.indexOf(item.keyName) !== -1); };
提示:如果arr2中可能存在缺失
keyName属性的对象,上述逻辑会自动将这类对象判定为非法项。如果需要单独处理这类异常,可以在判断逻辑前增加item.hasOwnProperty('keyName')的前置校验。
内容的提问来源于stack exchange,提问作者kirti
相关产品推荐
相关产品推荐

