Reputation: 124
I want to convert two arrays into another array format.
Here is my code:
var array1 = [ "Kolkata", "Begumpet", "Bellary"];
var array2 = [[[20,"Kolkata1"],[10,"Kolkata2c"]],
[[0,"Begumpet1"],[10, "Begumpet2e"]],
[[30, "Bellary1"],[0, "Bellary2a"]]]
console.log(array2);
var resultvalue = [];
for (i = 0; i < array2.length; i++) {
var result = "";
var m = 0;
for (j = 0; j < array2[i].length; j++) {
if(m==0){
result += "label: '" + array1[i] + "',";
m++;
}
result += " '" + array2[i][j][1] + "': " + array2[i][j][0] + ", ";
}
resultvalue.push(result);
}
console.log(resultvalue);
It's producing what I want, except that the result is a string, while I need the actual array.
The expected output object should be like this:
dataset = [
{label:"Kolkata", "Kolkata1":20, "Kolkata2c":10},
{label:"Begumpet", "Begumpet1":0, "Begumpet2e":10},
{label:"Bellary", "Bellary1":30, "Bellary2a":0},
];
Upvotes: 1
Views: 93
Reputation: 2679
There were some corrections in your desired output JSON object according to the best practices of structure of JSON. So According to what I felt to be valid, here is the correct code.
Moreover I have used JSON.stringify() to print the JSON object.
And I also have modified the way you were building the output JSON object.
var array1 = ["Kolkata", "Begumpet", "Bellary"];
var array2 = [
[
[20, "Kolkata1"],
[10, "Kolkata2c"]
],
[
[0, "Begumpet1"],
[10, "Begumpet2e"]
],
[
[30, "Bellary1"],
[0, "Bellary2a"]
]
];
var resultvalue = [];
for (i = 0; i < array1.length; i++) {
var result = {};
var temp = {};
temp.label = array1[i];
for (j = 0; j < 2; j++) {
temp[[array2[i][j][1]]] = array2[i][j][0];
}
resultvalue.push(temp);
}
document.write(JSON.stringify(resultvalue));
console.log(resultvalue);
SORRY.... COULDN'T UNDERSTAND THE QUESTION... I UPDATED THE CODE.
Upvotes: 1
Reputation: 350270
You could do it with this ES6 code:
var array1 = [ "Kolkata", "Begumpet", "Bellary"];
var array2 = [[[20,"Kolkata1"],[10,"Kolkata2c"]],
[[0,"Begumpet1"],[10, "Begumpet2e"]],[[30, "Bellary1"],[0, "Bellary2a"]]]
var result = array2.map( (pairs, i) =>
Object.assign ({ label: array1[i] }, ...pairs.map ( ([v, k]) => ({ [k]: v }))));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Upvotes: 1
Reputation: 42352
Another solution using Array.prototype.reduce
and forEach
on the inner arrays to get the required array - demo below:
var array1 = [ "Kolkata", "Begumpet", "Bellary"];
var array2 = [[[20,"Kolkata1"],[10,"Kolkata2c"]],[[0,"Begumpet1"],[10, "Begumpet2e"]],[[30, "Bellary1"],[0, "Bellary2a"]]];
var result = array2.reduce(function(p,c,i){
var elem = {label : array1[i]};
c.forEach(e => elem[e[1]] = e[0]);
p.push(elem);
return p;
},[]);
console.log(result);
.as-console-wrapper{top:0;max-height:100%!important;}
Upvotes: 1
Reputation: 386620
You could iterate array2
and map a new object for each entry.
var array1 = ["Kolkata", "Begumpet", "Bellary"],
array2 = [[[20, "Kolkata1"], [10, "Kolkata2c"]], [[0, "Begumpet1"], [10, "Begumpet2e"]], [[30, "Bellary1"], [0, "Bellary2a"]]],
dataset = array2.map(function (a, i) {
var o = { label: array1[i] };
a.forEach(function (b) {
o[b[1]] = b[0];
});
return o;
});
console.log(dataset);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Upvotes: 2
Reputation: 2594
To convert a javascript object to JSON you have to call the JSON.stringify
method.
var jsonString = JSON.stringify(array2);
Upvotes: 0