【问题标题】:best way to convert object with arrays to array with objects and viceversa将带有数组的对象转换为带有对象的数组的最佳方法,反之亦然
【发布时间】:2017-07-09 14:43:43
【问题描述】:

将数组对象转换为对象数组的最佳方法是什么,反之亦然

{
  category : ['a','b','c'],
  title : ['e','f','g'],
  code : ['z','x','v']
}

[
  {
    category : 'a',
    title : 'e',
    code : 'z'
  },
  {
    category : 'b',
    title : 'f',
    code : 'x'
  },
  {
    category : 'c',
    title : 'g',
    code : 'v'
  },
]

【问题讨论】:

  • Object.keys() + Array.reduce()
  • @amir,它对你有用吗?
  • @Alexandru-IonutMihai 是的,谢谢 :)
  • @amirhoseinahmadi,不要忘记接受答案以帮助其他人。

标签: javascript arrays object ecmascript-6


【解决方案1】:

您可以使用两个函数来生成数组或对象。他们与

function getArray(object) {
    return Object.keys(object).reduce(function (r, k) {
        object[k].forEach(function (a, i) {
            r[i] = r[i] || {};
            r[i][k] = a;
        });
        return r;
    }, []);
}

function getObject(array) {
    return array.reduce(function (r, o, i) {
        Object.keys(o).forEach(function (k) {
            r[k] = r[k] || [];
            r[k][i] = o[k];
        });
        return r;
    }, {});
}

var data = { category: ['a', 'b', 'c'], title: ['e', 'f', 'g'], code: ['z', 'x', 'v'] };

console.log(getArray(data));
console.log(getObject(getArray(data)));
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 绝对惊人
【解决方案2】:

这是使用reduce 方法和arrow 函数的解决方案。

var obj={
  category : ['a','b','c'],
  title : ['e','f','g'],
  code : ['z','x','v']
}
var result=obj[Object.keys(obj)[0]].reduce((a,b,i)=>{
  var newObj={};
  Object.keys(obj).forEach(function(item){
     newObj[item]=obj[item][i];
  });
  return a.concat(newObj);
},[]);
console.log(result);

【讨论】:

    【解决方案3】:

    您可以使用map()forEach()

    var obj = {
      category : ['a','b','c'],
      title : ['e','f','g'],
      code : ['z','x','v']
    }
    
    var result = Object.keys(obj).map(function(e, i) {
      var o = {}
      Object.keys(obj).forEach((a, j) => o[a] = obj[a][i])
      return o
    })
    
    console.log(result)

    【讨论】:

      猜你喜欢
      • 2016-12-22
      • 2020-12-19
      • 2021-04-21
      • 1970-01-01
      • 2023-02-15
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 2017-06-26
      相关资源
      最近更新 更多