2016-11-28 78 views
1

我想将两个数组转换为另一种数组格式。数组转换给出了字符串而不是数组

这里是我的代码:

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

它产生我想要的东西,但结果是一个字符串,而我需要实际的阵列。

预期的输出对象应该是这样的:

dataset = [ 
    {label:"Kolkata", "Kolkata1":20, "Kolkata2c":10}, 
    {label:"Begumpet", "Begumpet1":0, "Begumpet2e":10}, 
    {label:"Bellary", "Bellary1":30, "Bellary2a":0}, 
]; 
+0

KOTAK从哪里来?是不是你想成为加尔各答的输出? –

+0

对不起Tirthraj Barot。那就是“加尔各答”。我错误地给出了这样的结果 –

+0

此外,根据我的观点,“Kotak”:25等任何值都必须是一个对象内的对象......所以根据我认为的有效性,我将代码放在下面。 –

回答

2

您可以迭代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; }

+0

谢谢@Nina Scholz –

0

要转换为JavaScript对象到JSON你必须调用JSON.stringify方法。

var jsonString = JSON.stringify(array2); 
+0

您似乎没有阅读过问题标题。 OP实际上是在询问如何将数据转换为对象数组。 – Quentin

+0

嗨Cubi,我想将字符串转换为JSON,但我不想让json将字符串转换为 –

1

另一种解决方案使用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;}

1

你可以用做这个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; }

+0

谢谢@trincot –

+0

不客气。请注意,你只能接受一个答案(看起来你试图接受多个答案)。 – trincot

+1

嗨trincot。我可以同意,但每个答复都是正确的,为什么我困惑。但我学到更多。每个人的思维方式都不一样。所以我同意所有的回应。感谢你们。非常感谢。 –

1

有根据JSON的结构的最佳做法所需输出JSON对象一些修正。所以根据我认为是有效的,这里是正确的代码。

此外,我用JSON.stringify()来打印JSON对象。

而且我还修改了构建输出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 ....不明白的问题......我更新的代码。