Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过键数组访问Javascript(子)对象_Javascript_Arrays_Object_Javascript Objects - Fatal编程技术网

通过键数组访问Javascript(子)对象

通过键数组访问Javascript(子)对象,javascript,arrays,object,javascript-objects,Javascript,Arrays,Object,Javascript Objects,是否可以通过键数组在对象中设置变量? 例如,我有一个对象: var obj = {'outer': {'inner': 'value'} }; 并要设置由一组键选择的值: var keys = ['outer', 'inner']; 要获得此结果,请将其添加到新值“newValue”: obj = {'outer': {'inner': 'newValue'} }; 这里的关键点是,可以使用属性名称字符串访问对象属性:obj.propobj[“prop”] 函数SetValueByKeyN

是否可以通过键数组在对象中设置变量? 例如,我有一个对象:

var obj = {'outer': {'inner': 'value'} };
并要设置由一组键选择的值:

var keys = ['outer', 'inner'];
要获得此结果,请将其添加到新值“newValue”:

obj = {'outer': {'inner': 'newValue'} };

这里的关键点是,可以使用属性名称字符串访问对象属性:
obj.prop
obj[“prop”]

函数SetValueByKeyNames(对象、键、值){
var目标=obj;
对于(变量i=0;i
您可以做的是迭代键数组,确保每个键都存在并指向另一个对象,直到到达用于设置新值的最后一个键为止

function setVal(obj, keys, value) {
  var o = obj,
    len = keys.length;

  // iterate through all keys, making sure each key exists and points to an object
  for (var i = 0; i < len - 1; i++) {
    var key = keys[i];

    // check if the current key exists and is an object
    if (obj.hasOwnProperty(key) && typeof obj[key] === 'object' && obj[key]) {
      o = o[key];
    } else {
      // return false or throw an error cause the key is not an object or is missing. 
    }
  }

  // update the value at the last key
  o[keys[len - 1]] = value;
}
功能设置值(对象、键、值){
var o=obj,
len=键。长度;
//遍历所有键,确保每个键都存在并指向一个对象
对于(变量i=0;i
下面是一个运行示例:

功能设置值(对象、键、值){
var o=obj,
len=键。长度;
对于(变量i=0;i控制台日志(obj)function setVal(obj, keys, value) {
  var o = obj,
    len = keys.length;

  // iterate through all keys, making sure each key exists and points to an object
  for (var i = 0; i < len - 1; i++) {
    var key = keys[i];

    // check if the current key exists and is an object
    if (obj.hasOwnProperty(key) && typeof obj[key] === 'object' && obj[key]) {
      o = o[key];
    } else {
      // return false or throw an error cause the key is not an object or is missing. 
    }
  }

  // update the value at the last key
  o[keys[len - 1]] = value;
}