Get object with string identifier

2019-03-04 05:48发布

问题:

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

I have object

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

and i have JS function where input is "element.date.day". And basically i need to do something like this:

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

is this possible in JS ?

回答1:

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



回答2:

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



回答3:

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>



回答4:

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