How to set value to a property in a Javascript object, which is identified by an array of keys

前端 未结 2 1397
耶瑟儿~
耶瑟儿~ 2020-12-21 11:15

If there is a Javascript object with multiple levels, as in:

   myObject = {
         a: 12,
        obj11: {
                obj111: \'John\',
                      


        
相关标签:
2条回答
  • 2020-12-21 11:27
    function myFunc(myObj,myArr,newValue){
      var temp=myObj;
      for(var I=0;I<myArr.length;I++){
        temp=temp[myArr[I]];
      }
      temp=newValue;
    };
    

    Update: This is a classic example of how you can access properties from an object in JavaScript. You may, for simplicity, consider object as an array of properties. Now try and access the required property as if it is the index of the array. If u have a nested object, consider it as a nested array.

    Eg: console.log(myObj['obj11']['obj1111']);

    The above code will display { a:15, b: 35 }, before running the myFunc() and will display {z:12} after running it.

    0 讨论(0)
  • 2020-12-21 11:41

    You can use reduce() method to find nested object and if its found then you can use Object.assign() to add new property.

    var myObject = {"a":12,"obj11":{"obj111":"John","b":13,"obj1111":{"a":15,"b":35},"obj21":{"a":15,"b":16}}}
    
    function myFunc (myObj, myArr, newValue) {
      myArr.reduce(function(r, e, i, arr) {
        if(!arr[i+1] && typeof r[e] == 'object') Object.assign(r[e], newValue);
        return r[e] || {}
      }, myObj)
    }
    
    myFunc(myObject, ['obj11', 'obj1111'], {z:12});
    console.log(myObject)

    Update If you just want to change value of nested property then you can use something like this.

    var myObject = {"a":12,"obj11":{"obj111":"John","b":13,"obj1111":{"a":15,"b":35},"obj21":{"a":15,"b":16}}}
    
    function myFunc (myObj, myArr, newValue) {
      myArr.reduce(function(r, e, i, arr) {
        if(!arr[i+1] && r[e]) r[e] = newValue
        return r[e] || {}
      }, myObj)
    }
    
    myFunc(myObject, ['obj11', 'obj1111'], {z:12});
    console.log(myObject)

    0 讨论(0)
提交回复
热议问题