繁体   English   中英

如何在带有数组的Object中获取内容?

[英]how can I get something in Object with a Array?

我想在Object中更改值,但是这个Object是嵌套的,就像这样

Obj = {
  'a': {
    'b': {
      'c': {
        'name': 'bob'
      }
    }
  }
}

并且有一个数组:
['a','b','c']
我希望得到这个数组的name
如何将此数组更改为obj['a']['b']['c']['name']
必须考虑嵌套对象的不同层?我该怎么做?

或者在纯javascript中:

['a','b','c', 'name' ].reduce(function( t , v ){ return t[v];} , Obj)

 el = document.getElementById('dbg'); var json = function(val){ return JSON.stringify(val) }; var log = function(val){el.innerHTML += '<div><pre>' + val + '</pre><div>'} /****************************************************************/ var Obj = { 'a': { 'b': { 'c': { 'name': 'bob' } } } } var keyPath = ['a','b','c', 'name' ]; var result = keyPath.reduce(function( transformed , value){ return transformed[value]; } , Obj) log( 'result\\t : ' + result ) /***************************************************************/ // we can do also something like that : var Obj2 = { 'a': { 'b': { 'c': { 'name': ['bob' , 'marc' , 'jane' , 'lisa'] } } } } var keyPath2 = 'abcname.2' var result2 = keyPath2.split('.').reduce(function( transformed , value){ return transformed[value]; } , Obj2) log( 'result2\\t : ' + result2 ) /***************************************************************/ // and using it in a function var ns = function( keyPath , context , splitter){ var _keyPath = keyPath.split(splitter|| '.'); return _keyPath.reduce(function( transformed , value){ return transformed[value]; } , context) }; var keyPath3 = 'abcname.3'; var result3 = ns( keyPath3 , Obj2 ); log( 'result3\\t : ' + result3) 
 <div id='dbg'><div> 

这是lodash的经典案例,特别是_.get方法

 var Obj = { 'a': { 'b': { 'c': { 'name': 'bob' } } } } var keyPath = ['a','b','c']; alert(_.get(Obj, keyPath).name); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM