我有一个像
这样的对象var data = [
{
"Name": ["Jane", "Peter", "Jenny"],
"Id": [1, 2, 3],
"Years": [16, 17, 18]
}
];
但是我想把它放到需要其他格式的反应表
var data1 = [
{
"Name": "Jane",
"Id": 1,
"Years": 16,
},
{
"Name": "Peter",
"Id": 2,
"Years": 17,
},
{
"Name": "Jenny",
"Id": 3,
"Years": 18,
}
]
如何使用JSX转换它?
答案 0 :(得分:2)
我会找出最大属性长度(如果它们不完全相同),创建一个大小的数组,在for循环中迭代,使用数据键创建对象和匹配索引位置(null
如果没有匹配)并将它们推入数组。
const data = [{
"Name": ["Jane", "Peter", "Jenny"],
"Id": [1, 2, 3],
"Years": [16, 17, 18]
}]
const interestingData = data[0]
const keys = Object.keys(interestingData)
const maxItems = keys.reduce((count, key) => Math.max(count, interestingData[key].length), 0)
const transformed = new Array(maxItems)
for (var i = 0; i < maxItems; i++) {
transformed[i] = keys.reduce((obj, key) => Object.assign(obj, {
[key]: interestingData[key][i] || null // default value if no matching index
}), Object.create(null))
}
console.info(transformed)
答案 1 :(得分:2)
这是针对您的问题的非常直接的实现。对于迭代,我考虑了对象内 Name 数组的长度。
var data = [{
"Name": ["Jane", "Peter", "Jenny"],
"Id": [1, 2, 3],
"Years": [16, 17, 18]
}];
var data1 = [ ];
var iterations = data[0].Name.length;
var requiredData = data[0];
var keyArray = Object.keys(requiredData);
for ( var i = 0; i < iterations; i++ ) {
tempObj = { };
for (var key of keyArray) {
tempObj[key] = requiredData[key][i];
}
data1.push(tempObj);
}
console.log('data1 = ', data1)
&#13;