Javascript object key value coding. Dynamically setting a nested value

后端 未结 5 819
时光取名叫无心
时光取名叫无心 2020-12-15 01:58

I\'m working on a little library that lets me do some basic key value coding with objects. Say I have the following object:

var data = { key1: \"value1\", k         


        
5条回答
  •  暖寄归人
    2020-12-15 02:45

    Recursion is what you need:

    function setData(key,val,obj) {
      if (!obj) obj = data; //outside (non-recursive) call, use "data" as our base object
      var ka = key.split(/\./); //split the key by the dots
      if (ka.length < 2) { 
        obj[ka[0]] = val; //only one part (no dots) in key, just set value
      } else {
        if (!obj[ka[0]]) obj[ka[0]] = {}; //create our "new" base obj if it doesn't exist
        obj = obj[ka.shift()]; //remove the new "base" obj from string array, and hold actual object for recursive call
        setData(ka.join("."),val,obj); //join the remaining parts back up with dots, and recursively set data on our new "base" obj
      }    
    }
    
    setData("key1", "updated value1"); // data.key1 == "updated value1"
    setData("key2.nested1", 99); // data.key2.nested1 == 99
    

提交回复
热议问题