如何在对象中搜索特定的int或字符串?

时间:2013-08-01 20:41:30

标签: javascript jquery object find

我有一个大对象,我希望在对象中找到生成的数字而不知道它的路径或位置。我如何搜索财产或只搜索价值甚至是布尔?

即。一个对象,其对象的属性'version'的值为'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/

如果不事先知道'树',这甚至可能吗?

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

此函数查找给定对象的属性值,在给定的字符串路径上进行匹配。您可以在此处找到包含数据的fiddle,然后在wJs library中使用。{下面是独立版本。

对于您的使用,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;
}