2017-10-20 148 views
1

我怎么能改善这个代码不使用这么多_.each和并不总是验证其性能如何通过嵌套参数组

_.each(initial_obj, function(value, key){ 
    _.each(value, function(value2, key2){ 
     _.each(value2, function(value3, key3){ 
     _.isEmpty(new_obj[key3]) && (new_obj[key3] = {}); 
     _.isEmpty(new_obj[key3][key]) && (new_obj[key3][key] = []); 
     new_obj[key3][key][key2] = value3; 
     }) 
    }) 
    }) 


old_obj: {'a': {'en', 'es', 'pt'}, 'b': {'en', 'es', 'pt'}, 'c': {'en', 'es', 'pt'}}) 

    new_obj: {'en': ['a': [], 'b': [], 'c': []}, 
          'es': {'a': [], 'b': [], 'c': []}, 
          'pt': {'a': [], 'b': [], 'c': []} 
          }) 

回答

2

迭代的键的对象emptyness该对象使用Object#keysArray#reduce。然后迭代内部数组,使用Array#forEach。对于数组中的每个字符串,assignkey用空数组:

const obj = {'a': ['en', 'es', 'pt'], 'b': ['en', 'es', 'pt'], 'c': ['en', 'es', 'pt']}; 
 

 
const result = Object.keys(obj).reduce((r, key) => { 
 
    obj[key].forEach((str) => r[str] = Object.assign(r[str] || {}, { [key]: [] })); 
 
    
 
    return r; 
 
}, {}); 
 

 
console.log(result);

+0

打开一个新的问题,用新的有效的数据。 –

+0

是的,在那工作! –

+0

https://stackoverflow.com/questions/46858413/how-to-group-by-a-mix-of-nested-parameter-objects-and-arrays;] –

0

随着红宝石:

h = { a: ['en', 'es', 'pt'], b: ['en', 'es', 'pt'], c: ['en', 'es', 'pt'] } 

values = h.first.last 
    #=> ["en", "es", "pt"] 
h.keys.map { |k| [k, values.map { |v| [v,[]] }.to_h] }.to_h 
    #=> {:a=>{"en"=>[], "es"=>[], "pt"=>[]}, 
    # :b=>{"en"=>[], "es"=>[], "pt"=>[]}, 
    # :c=>{"en"=>[], "es"=>[], "pt"=>[]}}