JavaScript:将具有数组的对象解构为具有对象的数组

时间:2016-11-28 08:41:10

标签: javascript arrays object

我很难绕过如何做到这一点。我有这个对象:

var objData = {
  _Input_396__REPEAT15_374:["Bedroom2", "Bedroom3", "Bedroom4"],
  _Input_396__REPEAT15_375:["1st", "2nd", "3rd"],
  _Input_396__REPEAT15_376:["122", "133", "144"],
  _Input_396__REPEAT15_377:["122", "133", "144"],
  _Input_396__REPEAT15_378:["Bamboo", "FloorNone", "Cork"]
};

每个数组的长度将与对象中的其他数组相同,但长度会发生变化,因此3的长度不一定是长度。

我需要解构为:

var arrData = [
  {
    _Input_396__REPEAT15_374:"Bedroom2",
    _Input_396__REPEAT15_375:"1st",
    _Input_396__REPEAT15_376:"122",
    _Input_396__REPEAT15_377:"122",
    _Input_396__REPEAT15_378:"Bamboo"
  },
  {
    _Input_396__REPEAT15_374:"Bedroom3",
    _Input_396__REPEAT15_375:"2nd",
    _Input_396__REPEAT15_376:"133",
    _Input_396__REPEAT15_377:"133",
    _Input_396__REPEAT15_378:"FloorNone"
  },
  {
    _Input_396__REPEAT15_374:"Bedroom4",
    _Input_396__REPEAT15_375:"3rd",
    _Input_396__REPEAT15_376:"144",
    _Input_396__REPEAT15_377:"144",
    _Input_396__REPEAT15_378:"Cork"
  }
];

实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:8)

您可以迭代对象的键,然后迭代数组并使用所有项构建一个新数组。

使用的方法

  • Object.keys了解对象的自有属性

  • Array#forEach用于迭代给定数组

  • 模式x = x || defaultValue,测试x获取真值,如果没有,则将defaultValue分配给x



var objData = { _Input_396__REPEAT15_374: ["Bedroom2", "Bedroom3", "Bedroom4"], _Input_396__REPEAT15_375: ["1st", "2nd", "3rd"], _Input_396__REPEAT15_376: ["122", "133", "144"], _Input_396__REPEAT15_377: ["122", "133", "144"], _Input_396__REPEAT15_378: ["Bamboo", "FloorNone", "Cork"] },
    arrData = [];

Object.keys(objData).forEach(function (k) {
    objData[k].forEach(function (a, i) {
        arrData[i] = arrData[i] || {};
        arrData[i][k] = a;
    });
});

console.log(arrData);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:2)

您可以使用此ES6脚本以函数式编程样式执行此操作:



var objData = {
  _Input_396__REPEAT15_374:["Bedroom2", "Bedroom3", "Bedroom4"],
  _Input_396__REPEAT15_375:["1st", "2nd", "3rd"],
  _Input_396__REPEAT15_376:["122", "133", "144"],
  _Input_396__REPEAT15_377:["122", "133", "144"],
  _Input_396__REPEAT15_378:["Bamboo", "FloorNone", "Cork"]
};

var arrData = objData[Object.keys(objData)[0]].map( (_, i) => 
    Object.keys(objData).reduce( (acc, key) => (acc[key] = objData[key][i], acc), {} )
);

console.log(arrData);

.as-console-wrapper { max-height: 100% !important; top: 0; }