javascript 对象从键数组转换为对象数组 groupby key

javascript object transform from array of key to array of object groupby key

这是原文

{ 
  name: [ 'foo', 'bar' ],
  email: [ 'foo@mail.com', 'bar@mail.com' ],
  comment: [ 'message', 'bmessage' ] 
}

是否有任何方法可以通过 lodash/ _ / vanilla 转换为两个对象的数组

    [
      {
        name:"foo",
        email:"foo@mail.com",
        content:"message"
      },
      ...
    ]

您可以这样做,假设当前索引对应于每个属性中的正确值。

var obj = {
  name: [ 'foo', 'bar' ],
  email: [ 'foo@mail.com', 'bar@mail.com' ],
  comment: [ 'message', 'bmessage' ]
};

var arr = [];

for (var i = 0; i < obj.name.length; i++) {
  arr.push({
    name: obj.name[i],
    email: obj.email[i],
    comment: obj.comment[i]
  });
}

console.log(arr); 

输出:

[ { name: 'foo', email: 'foo@mail.com', comment: 'message' },
  { name: 'bar', email: 'bar@mail.com', comment: 'bmessage' } ]

这可能有点容易出错,如果索引与正确的值不匹配,或者如果每个 属性.

中的值数量不同

你可以运行这个代码.....

var array = [];   // declare a new array 

for(var i = 0 ;i <a.name.length;i++){
  var obj = {};   // declare new objcet
  obj.name = a.name[i];
  obj.email = a.email[i];
  obj.comment = a.comment[i];

  array.push(obj);   // push object into array 

}

console.log(array);

我建议遍历键,然后遍历属性的内容。

var obj = {
        name: ['foo', 'bar'],
        email: ['foo@mail.com', 'bar@mail.com'],
        comment: ['message', 'bmessage']
    },
    array = [];
Object.keys(obj).forEach(function (k) {
    obj[k].forEach(function (a, i) {
        array[i] = array[i] || {};
        array[i][k] = a;
    });
});
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');

下面是一个使用下划线的解决方案:

var keys = _.keys(data);

// create an array of all the values for each object
var valuesList = _.zip.apply(null, _.values(data));

// map across each value list to create the object
var result = _.map(valuesList, function(values){
    return _.object(keys, values)
});