2017-10-20 146 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"=>[]}}