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

如何检测JavaScript对象中是否存在与数组元素匹配的键?

问题描述

给定以下数组和对象:

array = ['data', 'category', 'hour'];

object = {
    "status": {
        "type": "INFO",
        "messages": []
    },
    "data": {
        "id": 1,
        "tenant": "675832",
        "process": "6911d872-35f8-11ea-8697-001dd8b71c20",
        "category": "resquests",
        "time": {
            hour: "12",
            minute: "30"
        }
    }
}

需求是检查object中是否存在键与array里的元素值一致。此前尝试通过点分割数组并过滤的方式未成功,尝试的代码如下:

const array = inputValue.split('.').map((item) => item);
解决方案

场景1:检查数组元素是否为对象任意层级的键

因为目标键可能存在于嵌套对象中(比如hour在data.time下),可以通过递归遍历对象所有层级的键,再与数组元素比对:

// 递归获取对象所有层级的键
function getAllKeys(obj) {
    let keys = [];
    for (const key in obj) {
        keys.push(key);
        if (typeof obj[key] === 'object' && obj[key] !== null) {
            keys = keys.concat(getAllKeys(obj[key]));
        }
    }
    return keys;
}

// 检查是否存在至少一个匹配的键
const hasMatchedKey = array.some(key => getAllKeys(object).includes(key));
console.log(hasMatchedKey); // 输出true,因为三个元素都在对象键中存在

// 若需要找出所有匹配的键
const matchedKeys = array.filter(key => getAllKeys(object).includes(key));
console.log(matchedKeys); // 输出['data', 'category', 'hour']

场景2:检查指定嵌套路径是否存在(对应你尝试的点分割逻辑)

如果你的inputValue是类似"data.time.hour"的路径字符串,之前的代码仅完成了分割,未校验路径有效性,可以用以下方法检查路径是否存在于对象中:

function checkPathValid(obj, pathArray) {
    let current = obj;
    for (const key of pathArray) {
        if (!current || !(key in current)) {
            return false;
        }
        current = current[key];
    }
    return true;
}

// 示例:校验"data.time.hour"路径
const inputValue = "data.time.hour";
const pathArray = inputValue.split('.');
console.log(checkPathValid(object, pathArray)); // 输出true

内容的提问来源于stack exchange,提问作者André Castro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:01:01