2015-10-12 2 views
0

Мне нужна помощь в получении свойства объекта со строкой в ​​JS.Получить объект со строковым идентификатором

У меня есть объект

elements = { 
    element : { 
      date: { 
       day: 'Monday' 
      } 
    } 
} 

и у меня есть функция JS, где вход "element.date.day". И в основном мне нужно сделать что-то вроде этого:

function getObjectByStringIdentifier (stringId) { 
    return elements[stringId]; 
} 

это возможно в JS?

ответ

1

Вы можете сделать что-то вроде этого

var elements = { 
 
    element: { 
 
    date: { 
 
     day: 'Monday' 
 
    }, 
 
    example: { 
 
     abc: 'hii' 
 
    } 
 
    } 
 
}; 
 

 
function getObjectByStringIdentifier(stringId) { 
 
    stringId = stringId.split('.'); 
 
    // split string using `.` 
 
    var res = elements; 
 
    // define res as object 
 
    for (var i = 0; i < stringId.length; i++) 
 
    // iterate over array 
 
    res = res[stringId[i]] 
 
    // update res as inner object value 
 
    return res; 
 
    // return result 
 
} 
 

 
console.log(getObjectByStringIdentifier("element.date.day")); 
 
console.log(getObjectByStringIdentifier("element.example.abc"));

-1

Современные браузеры поддерживают JSON.parse().

var arr_from_json = JSON.parse(json_string); 

В браузерах, которые этого не делают, вы можете включить библиотеку json2.

alert(arr_from_json.elements); 
+0

вы пробовали, что вы предлагаете? это не делает то, что нужно OP! – Anonymous0day

0

Вы можете сделать что-то вроде этого:

var elements = { 
 
    element : { 
 
      date: { 
 
       day: 'Monday' 
 
      } 
 
    }, 
 
    cars : { 
 
     racing : "Lamborghini", 
 
     classic: "Rolls Royce" 
 
    } 
 
} 
 

 

 
function getObjectByStringIdentifier (stringId) { 
 
    objects = stringId.split("."); 
 
    element = elements; 
 
    for(i=0; i < objects.length; i++) 
 
     element = element[objects[i]]; 
 
    return element; 
 
} 
 

 
alert(getObjectByStringIdentifier("cars.racing")); 
 
alert(getObjectByStringIdentifier("element.date.day")); 
 
alert(getObjectByStringIdentifier("cars.classic"));

0

Да вам может! :-)

var elements = { 
 
    element : { 
 
      date: { 
 
       day: 'Monday' 
 
      } 
 
    } 
 
} 
 

 
function getObjectByStringIdentifier (stringId) { 
 
    
 
    //return elements[stringId]; 
 
    //   ^ ^ 
 
    //   |  | 
 
    //   |------|---------------------------------------------| 
 
    //     |            | 
 
    //  -----------|            | 
 
    //  |              | 
 
    //  °              ° 
 
    return stringId.split('.').reduce(function(t,v){return t[v]; } , elements) 
 
} 
 

 

 
/** let's test it now ! **/ 
 

 
var stringIdentifier = "element.date.day"; 
 
var result = getObjectByStringIdentifier(stringIdentifier); 
 

 

 
document.getElementById('el').innerHTML = result;
<div id='el'></div>

Смежные вопросы