我有一个大对象,我希望在对象中找到生成的数字而不知道它的路径或位置。我如何搜索财产或只搜索价值甚至是布尔?
即。一个对象,其对象的属性'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
}
}
}
}
如果不事先知道'树',这甚至可能吗?
答案 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;
}