Javascript通过连续键数组访问和写入对象子值

标签 javascript

<分区>

我怎样才能得到像这样工作的方法 getValueThroughPath(object, keysArray):

var object = {
  key1: {
    key2: {
      key3: {
        key4: "value"
      }  
    }
  }
}

getValueThroughPath(object, ['key1', 'key2', 'key3', 'key4']); // = "value" and undefined if wrong path

?

我也在寻找 setValueThroughPath(object, keysArray) 等效方法。

我使用 Lodash如果这可以缩短解决方案

最佳答案

这会将对象向下移动到最后一个键。如果任何键拼写错误或丢失,它将返回 undefined:

function getValueThroughPath(obj, keys) {
  while(obj=obj[keys.shift()] || '', keys.length);
  return obj || undefined;
}

function setValueThroughPath(obj, keys, val) {
  while(keys.length>1) {
    obj[keys[0]]= obj[keys[0]] || {};
    obj= obj[keys.shift()];
  };
  obj[keys[0]]= val;
}

var object = {
  key1: {
    key2: {
      key3: {
        key4: "value"
      }  
    }
  }
}

setValueThroughPath(object, ['this', 'is', 'a', 'test'], 'Eureka!');
setValueThroughPath(object, ['this', 'is', 'a', 'new', 'test'], 'Hallelujah!');

console.log(getValueThroughPath(object, ['key1', 'key2', 'key3', 'key4']));   // "value"
console.log(getValueThroughPath(object, ['key1', 'key2', 'key5', 'key4']));   // undefined
console.log(getValueThroughPath(object, ['this', 'is', 'a', 'test']));        // "Eureka!"
console.log(getValueThroughPath(object, ['this', 'is', 'a', 'new', 'test'])); // "Hallelujah!"

关于Javascript通过连续键数组访问和写入对象子值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30811009/

相关文章:

php - 在不使用 value 属性的情况下在输入字段上显示 var

javascript - 如何使用 jquery 获取所选引导下拉项的值?

Javascript - 用连字符替换连续的空格

javascript - 替换jquery中ul的<a>文本

javascript - 谷歌图表工具提示中的 DIV 定位

javascript - 检查多个变量是否未定义

javascript 多正则表达式

javascript - IE 11 中的 Angular 应用程序错误。Chrome 中一切正常

javascript - 如何检查div是否存在或不存在父div?

javascript - 为什么 4294967295 >> 24 == -1 在 Javascript 中?