Get object with string identifier

前端 未结 4 1669
轮回少年
轮回少年 2021-01-29 04:58

I need help with getting property of object with String in JS.

I have object

elements = {
    element : {
            date: {
                 day: \'Mo         


        
相关标签:
4条回答
  • 2021-01-29 05:47

    You can do something like this

    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"));

    0 讨论(0)
  • 2021-01-29 05:57

    Modern browsers support JSON.parse().

    var arr_from_json = JSON.parse( json_string );
    

    In browsers that don't, you can include the json2 library.

    alert(arr_from_json.elements);
    
    0 讨论(0)
  • 2021-01-29 05:58

    Yes you can ! :-)

    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>

    0 讨论(0)
  • 2021-01-29 06:05

    You can do something like this :

    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 讨论(0)
提交回复
热议问题