0

我有一个大对象,我希望在不知道它的路径或位置的情况下在对象中找到一个生成的数字。如何搜索属性或仅搜索值甚至是布尔值?

即具有属性“版本”值为“90”​​的对象的对象

var objy = {
    example: 'unknown0',
    example1: 'unknown1',
    example2: 'unknown2',
    example3: 'unknown3',
    example4: 'unknown4',
    example5: {
        prop1: 1,
        prop2: 2,
        prop3: 3,
        prop4: 4,
        prop5: {
            etc1: true,
            etc2: false,
            etc4: {
                version: 90
            }
        }
    }
}

http://jsfiddle.net/J5Avu/

在事先不知道“树”的情况下,这是否可能?

4

2 回答 2

2

这是一个函数,它基本上递归地查看对象的属性,以查找 propertyName/propertyValue 组合并随时跟踪“路径”(jsfiddle)。null如果没有找到它会返回。

function findPropertyAndValueInObject( obj, prop, value, path ) {
    if( obj[prop] === value ) {
        return path;
    }
    else {
        var foundPath = null;
        for( var thisProp in obj ) {
            var propValue = obj[thisProp];
            if( typeof(propValue) === "object" ) {
                foundPath = findPropertyAndValueInObject(propValue, prop, value, path + "." + thisProp);
                if( foundPath !== null ) {
                    break;
                }
            }
        }

        return foundPath;
    }
}

console.log( findPropertyAndValueInObject( objy, "version", 90, "objy" ) );
//prints out "objy.example5.prop5.etc4"
于 2013-08-01T20:55:38.083 回答
0

此函数查找给定对象的属性值,匹配给定的字符串路径。在这里,您会发现它与您的数据有关,然后在这里使用wJs。下面是单机版。

为您的使用object_find('example5.prop5.etc4.version', object);将返回90

/**
 * Find data into an object using string path
 * like : "my.needle.name" into "haystack"
 * @param path
 * @param object object
 * @returns {*}
 */
function object_find(path, object) {
    var base = object, item;
    path = path.split('.');
    while (path.length > 0) {
        item = path.shift();
        if (base.hasOwnProperty(item)) {
            base = base[item];
            if (path.length === 0) {
                return base;
            }
        }
    }
    return false;
}
于 2014-06-16T12:38:40.070 回答