字符串'properties.dimensions.length'访问哈希{properties:{dimensions:{length:23}}}

And*_*ank 1 javascript node.js

JavaScript:给定一个字符串数组:

 ['properties.dimensions.length', 'properties.name']
Run Code Online (Sandbox Code Playgroud)

在散列中使用这些来验证或访问它们(实际上只是想验证密钥是否存在)的最佳方法是什么?

我在考虑字符串拆分('.'),但我无法真正理解每个数组值如何用于验证或访问哈希值.

比如['properties','dimensions','length']然后forEach要向下钻取,但理想情况下我想把它变成等价的代码:

myProperties['properties']['dimensions']['length']
Run Code Online (Sandbox Code Playgroud)

但是,如果这是一个完全hacky的方法,请随意说...并且很好!:-D

p.s*_*w.g 6

你可以尝试这样的事情:

function hasProperty(obj, props) {
    if (typeof props === "string") 
        return hasProperty(obj, props.split("."));
    for(var i = 0; i < props.length; i++) {
        if (props[i] in obj) 
            obj = obj[props[i]];
        else 
            return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

并称之为:

var propPath = 'properties.dimensions.length';
console.log(hasProperty(myProperties, propPath));
Run Code Online (Sandbox Code Playgroud)

示范

这是一个递归的替代方案:

function hasProperty(obj, props) {
    if (typeof props === "string") 
        return hasProperty(obj, props.split('.'));
    return props.length == 0 || props[0] in obj && hasProperty(obj[props.shift()], props);
}

var propPath = 'properties.dimensions.length';
console.log(hasProperty(myProperties, propPath));
Run Code Online (Sandbox Code Playgroud)

示范