2013-08-01 6 views
0

큰 개체가 있고 경로 또는 위치를 모른 채 개체 내에서 생성 된 번호를 찾으려고합니다. 속성이나 값 또는 심지어 bool을 검색하려면 어떻게해야합니까?개체 내에서 특정 int 또는 문자열을 검색하는 방법은 무엇입니까?

즉 속성 '버전'전에 손 '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/

이는 '나무'를 알 수없는 경우에도 가능의 값을 갖는 개체가 개체?

+1

방금 ​​주어진'property'와 '값'조합이 어디 오브젝트 "나무"의 존재 여부를 결정하려고 돌아갑니다? –

+0

멍청한 이들이 있다면, 어디 – captainrad

+1

마지막 질문에 대한 답변은 : 예, 이것은 "나무"를 미리 모른 채로 가능합니다. –

답변

2

Heres 기본적으로 객체의 속성을 통해 재귀 적으로 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" 
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; 
} 
관련 문제