简体   繁体   English

如何枚举复杂的javascript对象

[英]How to enumerate complex javascript object

How to enumerate complex javascript object to get property paths to plain values? 如何枚举复杂的javascript对象以获取纯值的属性路径?

In example if object is: 在示例中,如果object是:

let complex = {
  person: {name: 'mat', age: 31},
  car: {
      model: 'Volsan',
      engine: 'large', 
      doors:[
        { side:'right front', color: 'blue' },
        { side:'left rear', color: 'red' }
      ]
   }
};

and outcome would be like: 结果将是:

complex.person.name
complex.person.age
complex.car.model
complex.car.engine
complex.car.doors[0].side
complex.car.doors[0].color
complex.car.doors[1].side
complex.car.doors[1].color

so that there would be only those values that are "ending the graph" 这样就只有那些“结束图”的值

eg. 例如。 it would be reverse _.at from lodash: https://lodash.com/docs/4.17.5#at 这将是从lodash反向_.at: https://lodash.com/docs/4.17.5#at

This recursive solution uses Array.map() , and Object.keys() to add the keys to a base path. 此递归解决方案使用Array.map()Object.keys()将键添加到基本路径。 Then we flatten the resulting array using Array.concat() and spread : 然后,我们使用Array.concat()展平结果数组并传播

 const complex = { person: {name: 'mat', age: 31}, car: { model: 'Volsan', engine: 'large', doors:[ { side:'right front', color: 'blue' }, { side:'left rear', color: 'red' } ] } } const addDot = (b, s) => `${b}${b && '.'}${s}` const wrapBrackets = (b, s) => `${b}[${s}]` const mapPaths = (obj, base = '') => { if(typeof obj !== 'object') { return base; } const formatter = Array.isArray(obj) ? wrapBrackets : addDot; return [].concat(...Object.keys(obj) .map((key) => mapPaths(obj[key], formatter(base, key)))) }; const result = mapPaths(complex) console.log(result); 

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

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