当前位置: 首页 > 知识库问答 >
问题:

检查元素是否存在于JS对象中

宰父淳
2023-03-14

我想检查JS对象中是否存在“键”。有办法做到这一点吗?数据可以是一个任意子分支

例子:

var sometree = {
    foo : {
        data : 1
    },
    foo2 : {
        data : 5
    }
}

function checkForKey(key, obj) {
    //If I do "checkForKey(5, sometree)", I want the function
    //to return "sometree.foo2.data".
}

共有3个答案

东方华晖
2023-03-14

getDeepKeyForValue函数可以以“只给我一个”或“给我全部”的形式实现。您也可以要求它支持复杂的对象,但我编写的是支持简单值的对象。注意:因为键可以有'在它们中,我返回一个键路径的数组,并让您处理这些转角情况。您也无法从函数中恢复sometree已识别/变量名。这会有用的…:

   function getDeepKeyForValue (value, object, path) {
    var keySet = Object.keys(object || {});
    var key;
    var result;
    path = path || [];
    keySetLength = keySet.length;
    while (keySetLength--) {
        key = keySet[keySetLength];
        if (value === object[key]) {
            return path.concat(key);
        }
        result = getDeepKeyForValue(value, object[key], path.concat(key));
        if (result) {
            return result;
        }
    }
    return null;
}
慕容明煦
2023-03-14

应采取以下措施:

function checkForKey(key, json) {
    var found = false;
    for(var x in json) {
        if (json.hasOwnProperty(x)) {
            if(json[x][data] == key) {
                found = key;
            }
        }
    }
    return found;
}
梁兴文
2023-03-14

如果对象可以是任意深度,则需要递归:

    var sometree = {
        foo: {
            data: 1
        },
        foo2: {
            data: 5
        }
    }

    function checkForValue( value, json, name ) {
        var result = checkObject( value, json );
        return result ? name +'.'+ result : null;
    }

    function checkObject( value, json ) {
        var keys = Object.keys(json);
        for ( var i = 0; i < keys.length; i++ ) {
            var key = keys[i];
            if ( typeof json[key] === 'object' && json[key] !== null ) {
                var result = checkObject( value, json[key] );
                if ( result )
                    return key +'.'+ result;
            }
            else if ( json[key] === value ) {
                return key;
            }
        }
        return null;
    }

    document.write( checkForValue( 5, sometree, 'sometree' ) );
 类似资料:
  • 问题内容: 我试图在执行此行之前检查元素是否存在: 如果id 在文档中不存在,甚至在-block中,都会引发错误“ no such element” 。我找到了Java的答案,您可以在其中检查大小是否为0,但是在node-js中,这会在我检查大小之前引发错误。 问题答案: 您可以利用的可选错误处理程序参数。 我在文档中找不到明确声明的内容,但是通过模块源代码中的函数定义确定了这一点:

  • 问题内容: 我有一个看起来像元组的列表: 检查该元组中是否存在值的最佳方法是什么?例如,我想能够说: 并得到真 问题答案: 您正在寻找: 结合一个简单的生成器表达式,就可以完成任务。生成器表达式接受每个元组,如果包含则产生。然后在请求的第一个项目返回时返回(否则为)。因此,这就是您想要的。它也可以很好地读取- 如果有任何元组包含。 如果您要执行大量操作并且需要性能,那么可能值得设置所有值的集合以使

  • 问题内容: 如何检查JavaScript对象或数组中是否存在特定键? 如果密钥不存在,而我尝试访问它,它将返回false吗?还是抛出错误? 问题答案: 检查不确定性不是测试密钥是否存在的准确方法。如果密钥存在但值实际上是怎么办? 您应该改为使用运算符: 如果要检查密钥是否不存在,请记住使用括号: 或者,如果您要特别测试对象实例的属性(而不是继承的属性),请使用: 有关和的方法之间的性能比较,关键是

  • 我有一个js对象,如下所示。 我现在的代码是。 我的问题是我的代码可以有的值,但是如果在这种情况下我做了然后我就得到了现实。 如何确保我的数据具有和,以及可以具有值。 jsfiddle:https://jsfiddle.net/3jo7vx4p/ 我们衷心感谢您的帮助。

  • 问题内容: 我想检查Selenium中是否存在一个元素,如果存在,请将其分配给一个名称。 现在,我有这样的东西: 但是,当不存在值为9的元素时,它将返回错误。有没有一种方法可以检查它是否存在,或者类似的东西? 问题答案: 有几种选择。我推荐这些。 1.创建方法或Web驱动程序扩展。 2.计算元素,如果有1个或更多元素,则获取它。 那你可以检查

  • 问题内容: 将页面对象与webdriver一起使用时,如何检查元素是否存在。 到目前为止,我是这样做的。 页面对象: 但是我不敢相信这种尝试/捕获是人们应该这样做的方式。 那么检查元素是否退出的更好方法是什么(使用Page Objects)? 问题答案: Webdriver旨在在未找到元素的情况下引发异常。因此,没有任何方法可以验证Webdriver中元素的存在。 进行检查-http://grou