【问题标题】:Convert a complexe object using Lodash functions使用 Lodash 函数转换复杂对象
【发布时间】:2017-02-20 09:47:09
【问题描述】:

我是 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
        }

【问题讨论】:

  • 你能把整个初始对象放上去吗
  • 你有没有尝试过?
  • 更新了我尝试过的解决方案

标签: javascript ecmascript-6 lodash


【解决方案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);

【讨论】:

  • 我根据您的回答 tkx 完成了我的解决方案。我只是想指出位置 [0] res[0].toLowerCase() 中的元素
【解决方案2】:

您可以使用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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 2019-04-18
    相关资源
    最近更新 更多