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

如何检测数组中是否有元素匹配对象的任意顶级键

检测数组元素是否匹配对象的顶级键

问题场景

现有对象arr1和数组arr2,需要判断arr2中是否存在任意元素匹配arr1的顶级键(forms或assets):

const arr1 = {
  forms: {
    permissions: {
      create: true,
      edit: true,
      delete: true,
    },
  },
  assets: {
    permissions: {
      create: true,
      edit: true,
      delete: true,
    },
  },
};
const arr2 = ["assets", "media"];

原尝试的代码仅在arr2为单个元素时生效,无法处理数组场景:

if (arr2 in arr1) {
    console.log("key is in contained in object");
}

解决方案

方法1:使用some()配合hasOwnProperty()

通过数组的some()方法遍历arr2,逐个检查元素是否是arr1的自有顶级键:

if (arr2.some(key => arr1.hasOwnProperty(key))) {
  console.log("存在匹配的顶级键");
}
  • some()会在找到第一个满足条件的元素时立即返回true,无需遍历全部元素,性能更优
  • hasOwnProperty()确保只检查对象自身的属性,不会包含原型链上的属性

方法2:先获取对象键数组再匹配

先通过Object.keys()提取arr1的所有顶级键,再检查arr2中是否有元素存在于该数组中:

const arr1TopKeys = Object.keys(arr1);
if (arr2.some(key => arr1TopKeys.includes(key))) {
  console.log("存在匹配的顶级键");
}

原代码问题说明

arr2 in arr1是错误用法:in操作符的左操作数必须是字符串类型的属性名,而不是数组。当arr2是单个字符串时,表达式会检查该字符串是否是arr1的属性;但arr2为数组时,实际是在检查arr1是否存在名为数组字符串形式(如"["assets","media"]")的属性,显然不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:40:27