如何将仅包含数组值的对象转换为对象数组,每个对象都具有转置的 属性 值?
How to convert an object of just array values into an array of objects, each with transposed property values?
在node.js中转换以下数据的最有效方法是什么?任何帮助将非常感激。谢谢!
我有一些数据是这样的 ->
const inputdata = {
data1: [5.0, 10.0, 50.0, 100.0, 500.0],
data2: [5.0, 10.0, 50.0, 100.0, 500.0],
data3: [5.0, 10.0, 50.0, 100.0, 500.0],
};
我需要将它转换成这个 ->
[
{ data1: 5.0, data2: 5.0, data3: 5.0 },
{ data1: 10.0, data2: 10.0, data3: 10.0 },
{ data1: 50.0, data2: 50.0, data3: 50.0 },
{ data1: 100.0, data2: 100.0, data3: 100.0 },
{ data1: 500.0, data2: 500.0, data3: 500.0 },
]
代码尝试 ->
const inputdata = {
data1: [5.0, 10.0, 50.0, 100.0, 500.0],
data2: [5.0, 10.0, 50.0, 100.0, 500.0],
data3: [5.0, 10.0, 50.0, 100.0, 500.0],
};
const outputdata = [];
Object.keys(inputdata).forEach(key => {
let value = inputdata[key];
if (key === "data1"){
for (let i = 0; i < value.length; i++) {
outputdata.push({ data1: 0, data2: 0, data3: 0 });
}
}
}
Object.keys(inputdata).forEach(key => {
let value = inputdata[key];
if (key === "data1") {
for (let i = 0; i < value.length; i++) {
outputdata[i].data1 = value[i];
}
}
if (key === "data2") {
for (let i = 0; i < value.length; i++) {
outputdata[i].data2 = value[i];
}
}
if (key === "data3") {
for (let i = 0; i < value.length; i++) {
outputdata[i].data3 = value[i];
}
}
}
console.log(inputdata);
console.log(outputdata);
您可以转置数据并从数据构建新对象。
const
data = { data1: [5, 10, 50, 100, 500], data2: [5, 10, 50, 100, 500], data3: [5, 10, 50, 100, 500] },
result = Object
.entries(data)
.reduce((r, [k, a]) => a.map((v, i) => ({ ...r[i], [k]: v })), []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
使用下面提供的分步示例代码的技术...
// reducer function which transposes
// a table into a matrix and vice versa.
function transpose(result, row) {
return row.reduce((matrix, value, idx) => {
(matrix[idx] ??= []).push(value);
return matrix;
}, result);
}
const inputdata = {
data1: [5.0, 10.0, 50.0, 100.0, 500.0],
data2: [5.0, 10.0, 50.0, 100.0, 500.0],
data3: [5.0, 10.0, 50.0, 100.0, 500.0]
};
console.log(
Object
// convert `inputdata` into a table
// ... an array of row like arrays.
.values(inputdata)
);
console.log(
Object
// - convert `inputdata` into a table
// ... an array of row like arrays.
.values(inputdata)
// - then transpose the table into a matrix.
.reduce(transpose, [])
);
console.log(
Object
// - convert `inputdata` into a table
// ... an array of row like arrays.
.values(inputdata)
// - then transpose the table into a matrix.
.reduce(transpose, [])
// - then convert/map matrix
// into an array of objects.
.map(vector =>
vector.reduce((object, value, idx) =>
Object.assign(object, {
[`data${ idx + 1 }`]: value,
}), {}
)
)
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
在node.js中转换以下数据的最有效方法是什么?任何帮助将非常感激。谢谢!
我有一些数据是这样的 ->
const inputdata = {
data1: [5.0, 10.0, 50.0, 100.0, 500.0],
data2: [5.0, 10.0, 50.0, 100.0, 500.0],
data3: [5.0, 10.0, 50.0, 100.0, 500.0],
};
我需要将它转换成这个 ->
[
{ data1: 5.0, data2: 5.0, data3: 5.0 },
{ data1: 10.0, data2: 10.0, data3: 10.0 },
{ data1: 50.0, data2: 50.0, data3: 50.0 },
{ data1: 100.0, data2: 100.0, data3: 100.0 },
{ data1: 500.0, data2: 500.0, data3: 500.0 },
]
代码尝试 ->
const inputdata = {
data1: [5.0, 10.0, 50.0, 100.0, 500.0],
data2: [5.0, 10.0, 50.0, 100.0, 500.0],
data3: [5.0, 10.0, 50.0, 100.0, 500.0],
};
const outputdata = [];
Object.keys(inputdata).forEach(key => {
let value = inputdata[key];
if (key === "data1"){
for (let i = 0; i < value.length; i++) {
outputdata.push({ data1: 0, data2: 0, data3: 0 });
}
}
}
Object.keys(inputdata).forEach(key => {
let value = inputdata[key];
if (key === "data1") {
for (let i = 0; i < value.length; i++) {
outputdata[i].data1 = value[i];
}
}
if (key === "data2") {
for (let i = 0; i < value.length; i++) {
outputdata[i].data2 = value[i];
}
}
if (key === "data3") {
for (let i = 0; i < value.length; i++) {
outputdata[i].data3 = value[i];
}
}
}
console.log(inputdata);
console.log(outputdata);
您可以转置数据并从数据构建新对象。
const
data = { data1: [5, 10, 50, 100, 500], data2: [5, 10, 50, 100, 500], data3: [5, 10, 50, 100, 500] },
result = Object
.entries(data)
.reduce((r, [k, a]) => a.map((v, i) => ({ ...r[i], [k]: v })), []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
使用下面提供的分步示例代码的技术...
// reducer function which transposes
// a table into a matrix and vice versa.
function transpose(result, row) {
return row.reduce((matrix, value, idx) => {
(matrix[idx] ??= []).push(value);
return matrix;
}, result);
}
const inputdata = {
data1: [5.0, 10.0, 50.0, 100.0, 500.0],
data2: [5.0, 10.0, 50.0, 100.0, 500.0],
data3: [5.0, 10.0, 50.0, 100.0, 500.0]
};
console.log(
Object
// convert `inputdata` into a table
// ... an array of row like arrays.
.values(inputdata)
);
console.log(
Object
// - convert `inputdata` into a table
// ... an array of row like arrays.
.values(inputdata)
// - then transpose the table into a matrix.
.reduce(transpose, [])
);
console.log(
Object
// - convert `inputdata` into a table
// ... an array of row like arrays.
.values(inputdata)
// - then transpose the table into a matrix.
.reduce(transpose, [])
// - then convert/map matrix
// into an array of objects.
.map(vector =>
vector.reduce((object, value, idx) =>
Object.assign(object, {
[`data${ idx + 1 }`]: value,
}), {}
)
)
);
.as-console-wrapper { min-height: 100%!important; top: 0; }