0

현재 깊이를 알지 못하는 다차원 객체를 확인하고 생성하려면 javascript eval()을 사용하고 있습니다.알 수없는 크기의 객체 만들기 평가판을 사용하지 않음

기본적으로이 다중 깊이 개체를 만들 수있는 방법이 있는지 알고 싶습니다. 물체는 result['one']['two']['three']['four']['five']['six']['seven']만큼 깊을 수 있습니다. 나는 eval()을 사용하는 것이 완벽하다고 생각하지만, 성능에 대해서도 걱정하고있다. ") (평가"나는 새로운 변수에 각각 깊이를 참조하는 생각,하지만 난 자바 스크립트

에 포인터를 할
 create = function(fields, create_array){ 
     var field; 

     for (j = 0; j < len; j++){ 
      field = fields.slice(0, j).join(''); 
      if (field){ 
      // is there any way to do this without eval? 
      eval('if (typeof result' + field + ' == "undefined" || !result' + field + ') result' + field + ' = ' + (create_array?'[]':'{}') + ';'); 
      } 
     } 
     } 
+0

입력 내용이 정확히 무엇입니까? –

+0

입력은''또는''JSON을 사용하여 AJAX를 통해 보낼 객체를 작성합니다. – pocesar

답변

0

내 마음이 편합니다. 재귀 함수를 사용하여 개체가 제대로 만들어 졌는지 확인했습니다.

 create = function(create_array, res, path){ 
     var field = fields.shift(); 

     if (field){ 
      if (typeof res[field] == "undefined" || !res[field]) res[field] = (create_array?[]:{}); 
      path.push('["' + field + '"]'); 
      create(create_array, res[field], path); 
     } 
     } 

     var result = {}, strpath = [], fields[]; 
     create(true, result, strpath); 
     eval('result' + strpath.join('') + ' = value;'); 

변수 "field"는 개체의 수준을 포함하는 함수 외부의 변수입니다. result["field"]["name"]["first"] = value["field"] 또는 ["name"] 필드가 존재하지 않거나 객체로 정의하지 않으면 오류가 발생하고 실행이 중단되므로 배열이나 객체로 객체 변수를 미리 작성해야합니다.

두 번째 eval()에 대한 다른 옵션을 찾을 수 없습니다. 깊이를 모른 채로 객체의 여러 속성에 액세스하는 방법을 제공 할 방법이 없습니다.

2

방법에 대한

var deep = { one: { two: { three: { four: { five: { six: { seven: 'peek-a-boo!' }}}}}}}; 

내가 무엇을 볼 수 없습니다하는 방법을 모른다 이 일과 전혀 관련이 없다. 그러한 객체를 "초기화"할 이유가 없습니다. 그냥 만드십시오. 당신이 (내가 이해하지 못하는 이유)있어처럼 당신은 API와 함수를 작성하고 싶다면

, 당신이 할 수 있습니다 :

function create(fields, create_array) { 
    var rv = create_array ? [] : {}, o = rv; 

    for (var i = 0; i < fields.length; ++i) { 
    o = o[fields[i]] = create_array ? [] : {}; 
    } 

    return rv; 
} 

어느 시점이있을 것 같지 않습니다 "create_array"플래그에, 당신은 항상 열쇠에 대한 문자열을 사용하고 있기 때문에.

관련 문제