【问题标题】:Javascript object transform with lodash or underscore带有 lodash 或下划线的 Javascript 对象转换
【发布时间】:2016-03-16 01:00:49
【问题描述】:

我有一个结构如下的对象:

[{
     n_vId: 1,
     s_vName: 'test',
     d_date: '2016-03-15 00:00:00'
     f_a: 0,
     f_b: 0,
     f_c: 0,
     f_d: 4,
     f_e: 0,
     f_f: 0.1,
     f_g: 0
},
{
     n_vId: 2,
     s_vName: 'test',
     d_date: '2016-03-15 00:15:00'
     f_a: 1,
     f_b: 1,
     f_c: 0,
     f_d: 4,
     f_e: 0,
     f_f: 0.1,
     f_g: 0
}]

我想把这个对象转换成

a = [
     {
         date: '2016-03-15 00:00:00',
         a: 0
     },
     {
         date: '2016-03-15 00:15:00',
         a: 1
     }
]

b = [
     {
         date: '2016-03-15 00:00:00',
         b: 0
     },
     {
         date: '2016-03-15 00:15:00',
         b: 1
     }
]
...

我可以改变它。但我认为我的过程是如此复杂。 所以,你能告诉我正确的过程吗? 现在我使用 lodash 但可以使用下划线或其他 js 模块。

【问题讨论】:

    标签: javascript json object underscore.js lodash


    【解决方案1】:

    你可以简单地使用地图:

    a = data.map(function(i) {
            return {date: i.d_date, a: i.f_a};
        });
    
    b = data.map(function(i) {
            return {date: i.d_date, b: i.f_b};
        });
    

    对我来说似乎很简单。

    【讨论】:

    • 这个甚至不需要库
    【解决方案2】:

    正如其他人所说,您不需要 Lodash 或 Underscore,因为这只是一个 map() 操作,但如果您愿意,可以使用这些库中的 _.map() 函数。

    var objs = [{
      n_vId: 1,
      s_vName: 'test',
      d_date: '2016-03-15 00:00:00',
      f_a: 0,
      f_b: 0,
      f_c: 0,
      f_d: 4,
      f_e: 0,
      f_f: 0.1,
      f_g: 0
    }, {
      n_vId: 2,
      s_vName: 'test',
      d_date: '2016-03-15 00:15:00',
      f_a: 1,
      f_b: 1,
      f_c: 0,
      f_d: 4,
      f_e: 0,
      f_f: 0.1,
      f_g: 0
    }];
    
    function transform(letter) {
      return _.map(objs, function (obj) {
        var out = {
          date: obj.d_date
        };
        out[letter] = obj['f_' + letter];
        return out;
      });
    }
    
    var a = transform('a'),
        b = transform('b'); // etc.
    
    document.getElementById('out').textContent = JSON.stringify({a: a, b: b}, true, '\t');
    <script src="https://cdn.jsdelivr.net/lodash/4.6.1/lodash.min.js"></script>
    
    <pre id="out"></pre>

    【讨论】:

    • 为转换函数点赞:我也打算将转换函数添加到我的答案中,但决定保持简单。
    【解决方案3】:

    看看这个 npm 模块https://github.com/gabesoft/trans

       var trans = require('trans');
       var results = trans(data)
         .mapff('d_date', 'date')
         .mapff('f_a', 'a')
         .pick('date', 'a')
         .value();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 2021-01-06
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多