What is the most efficient way to convert the data below in node.js? Any help would be much appreciated. Thanks!
I have some data that looks like this ->
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],
};
and I need to convert it into this ->
[
{ 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 },
]
Code attempt ->
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);
Used techniques of the below provided step by step example code ...
// 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; }