2017-02-20 30 views
-2

我是新來的lodash,我想格式化一個對象,有沒有辦法用lodash函數或其他最佳方式來做到這一點。使用Lodash函數轉換複合對象

,初始目標看生活這樣的:

var obj = { 
valuesStr: 
    { ref_str: [ 'REF' ], 
    des_str: [ 'DES' ], 
    desc_str: [ 'DESC' ] }, 
id: 1 
} 

最終的目標應該是這樣的:

var result = { 
value: 
    [ { code: 'ref', context: '', value: [ 'REF' ] }, 
    { code: 'des', context: '', value: [ 'DES' ] }, 
    { code: 'desc', context: '', value: [ 'DESC' ] } ], 
id: 1 
} 

我試過這個解決方案,但不給我預期的結果:

var res = { 
      value: _.map(obj.valuesStr, res => { 
      return { 
       code: res.toLowerCase(), 
       context: '', 
       value: res, 
      }; 
      id: obj.id 
     } 
+1

你可以把整個初始對象 – user93

+1

你嘗試過什麼? –

+0

更新瞭解決方案我試過 – kyserslick

回答

1

不需要lodash,用普通的js很容易做到這一點

var obj = { 
 
    valuesStr: { 
 
    ref_str: ['REF'], 
 
    des_str: ['DES'], 
 
    desc_str: ['DESC'] 
 
    }, 
 
    id: 1 
 
} 
 

 
var res = { 
 
    value: Object.keys(obj.valuesStr).map(v => ({ 
 
    code: obj.valuesStr[v][0].toLowerCase(), 
 
    context: '', 
 
    value: obj.valuesStr[v] 
 
    })), 
 
    id: obj.id 
 
} 
 

 
console.log(res);

+0

我根據您的答案tkx提出了我的解決方案。我只是想指出位置元素[0] ** res [0] .toLowerCase()** – kyserslick

0

您可以使用reduce()方法來創建新的對象。

var obj = { 
 
    valuesStr: { 
 
    ref_str: ['REF'], 
 
    des_str: ['DES'], 
 
    desc_str: ['DESC'] 
 
    }, 
 
    id: 1 
 
} 
 
var result = Object.keys(obj.valuesStr).reduce(function(r, e) { 
 
    r.value.push({ code: e.split('_')[0], context: '', value: obj.valuesStr[e] }) 
 
    return r 
 
}, {value: [], id: obj.id}) 
 

 
console.log(result)