【问题标题】:How to properly format this object如何正确格式化此对象
【发布时间】:2017-04-11 10:50:17
【问题描述】:

我得到了一个带有数组的对象,它给出了这个输出(输入来自一系列带有组名的表单):

{ 
  username: [ 'username1', 'username2' ],
  firstname: [ 'firstname1', 'firstname2' ],
  lastname: [ 'lastname1', 'lastname2' ],
  email: [ 'email1', 'email2' ],
 }

我希望对象的格式如下:

  [{username : username1,
    firstname : firstname1,
    lastname : lastname1,
    email : email1},

    {username: username2,
     firstname: firstname2,
     lastname : lastname2,
     email : email2}
                       ]

当我使用 node.js 时,我认为 lodash 有一些方法。谁能给我一些帮助?谢谢!

【问题讨论】:

  • 每个数组的长度是否相同?
  • 是的,因为它取自一系列用户输入以及每个表单组所需的信息

标签: javascript node.js html forms object


【解决方案1】:

可能的解决方案,使用Array#forEachObject.keys

var obj = { username: [ 'username1', 'username2' ], firstname: [ 'firstname1', 'firstname2' ], lastname: [ 'lastname1', 'lastname2' ], email: [ 'email1', 'email2' ] }, res = [];
 
    obj.username.forEach(function(_, i) {
      var object = {};
      Object.keys(obj).forEach(function(c) {
        object[c] = obj[c][i];
      });
      res.push(object);
    });

    console.log(res);

Array#reduce 选项。

var obj = { username: [ 'username1', 'username2' ], firstname: [ 'firstname1', 'firstname2' ], lastname: [ 'lastname1', 'lastname2' ], email: [ 'email1', 'email2' ] },
 
    res = obj.username.reduce(function(s,a,i) {
      var object = {};
      Object.keys(obj).forEach(function(c) {
        object[c] = obj[c][i];
      });
      s.push(object);
      return s;
    }, []);

    console.log(res);

【讨论】:

  • 这个太完美了!!谢谢,它解决了我的问题:)
【解决方案2】:

在纯javascript中:

var oldObj = { 
  username: [ 'username1', 'username2' ],
  firstname: [ 'firstname1', 'firstname2' ],
  lastname: [ 'lastname1', 'lastname2' ],
  email: [ 'email1', 'email2' ],
};
var newArray =[];
for(var key in oldObj)
{
  oldObj[key].forEach(function(property){
    var index = oldObj[key].indexOf(property);
    if(!newArray[index])
    newArray[index] = {};
    newArray[index][key] = property
  });
}

【讨论】:

    【解决方案3】:

    使用lodash -

    console.log(_.transform(myObj, function(result, value, key) {
      _.each(value, function( val, i){
            if(!result[i]) result[i] = {};
                result[i][key]= val;
            });
    }, []));
    

    在这里试试 - lodash unwind

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 2021-09-07
      • 1970-01-01
      • 2020-11-05
      • 2010-10-13
      • 2014-09-22
      • 1970-01-01
      相关资源
      最近更新 更多