我很难绕过如何做到这一点。我有这个对象:
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"
}
];
实现这一目标的最佳方法是什么?
答案 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; }