简体   繁体   English

数组转换给出字符串而不是数组

[英]Array conversion gives string instead of array

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},
];

You could iterate array2 and map a new object for each entry. 您可以迭代array2并为每个条目映射一个新对象。

 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; } 

Another solution using Array.prototype.reduce and forEach on the inner arrays to get the required array - demo below: 在内部数组上使用Array.prototype.reduceforEach以获得所需数组的另一种解决方案-下面的演示:

 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;} 

You could do it with this ES6 code: 您可以使用以下ES6代码来做到这一点:

 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; } 

There were some corrections in your desired output JSON object according to the best practices of structure of JSON. 根据JSON结构的最佳做法,您所需的输出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. 此外,我已经使用JSON.stringify()来打印JSON对象。

And I also have modified the way you were building the output JSON object. 而且我还修改了构建输出JSON对象的方式。

 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. 抱歉。。。。。。我更新了代码。

要将javascript对象转换为JSON,您必须调用JSON.stringify方法。

var jsonString = JSON.stringify(array2);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM