2017-04-12 56 views
0

您好,我有一個來自MongoDB的列的對象的JavaScript數組。列包含鍵和值作爲數組。這裏是我的代碼平面數據的鍵值對

[ 
    { 
     "F":"Age Min", 
     "H":"Age Min", 
     "L":"", 
     "V":[ 
     "1", 
     "2", 
     "3" 
     ] 
    }, 
    { 
     "F":"Age Max", 
     "H":"Age Max", 
     "L":"", 
     "V":[ 
     "12", 
     "30", 
     "4" 
     ] 
    } 
] 

我想要什麼作爲輸出

[ 
    { 
     "Age Min":1, 
     "Age Max":12 
    }, 
    { 
     "Age Min":2, 
     "Age Max":30 
    }, 
    { 
     "Age Min":3, 
     "Age Max":4 
    } 
] 

需要幫助,我奮力以獲得所需的輸出。 謝謝。

回答

1

var input = [ 
 
    { 
 
     "F":"Age Min", 
 
     "H":"Age Min", 
 
     "L":"", 
 
     "V":[ 
 
     "1", 
 
     "2", 
 
     "3" 
 
     ] 
 
    }, 
 
    { 
 
     "F":"Age Max", 
 
     "H":"Age Max", 
 
     "L":"", 
 
     "V":[ 
 
     "12", 
 
     "30", 
 
     "4" 
 
     ] 
 
    } 
 
]; 
 

 
var output = []; 
 
for (var i = 0; i < input.length; i++) { 
 
    var prop = input[i]; 
 
    for (var j = 0; j < prop.V.length; j++) { 
 
    if (j >= output.length) { output[j] = {}; } 
 
    var o = output[j]; 
 
    o[prop.F] = prop.V[j]; 
 
    } 
 
} 
 

 
console.log(output);

+0

ES6版本: 讓輸出= [];如果(index> = output.length){output [index] = {};} output [index(value)=> {value.V.map((v,index)=> { } ] [value.F] = value.V [index] }); }); console.log(輸出); –

1

你可以迭代外陣列和內陣列和建立一個新的對象與所述轉置的數據。

var array = [{ F: "Age Min", H: "Age Min", L: "", V: ["1", "2", "3"] }, { F: "Age Max", H: "Age Max", L: "", V: ["12", "30", "4"] }], 
 
    result = array.reduce(function (r, a) { 
 
     a.V.forEach(function (b, i) { 
 
      r[i] = r[i] || {}; 
 
      r[i][a.F] = b; 
 
     }); 
 
     return r; 
 
    }, []); 
 
    
 
console.log(result);

ES6與緊湊的風格。

var array = [{ F: "Age Min", H: "Age Min", L: "", V: ["1", "2", "3"] }, { F: "Age Max", H: "Age Max", L: "", V: ["12", "30", "4"] }], 
 
    result = array.reduce((r, a) => (a.V.forEach((b, i) => (r[i] = r[i] || {})[a.F] = b), r), []); 
 
    
 
console.log(result);

+0

你總是打我幾分鐘:/ – gyre

0

您可以使用Array#reduceArray#forEach調整你的數據:

var data = [{ 
 
    "F": "Age Min", 
 
    "H": "Age Min", 
 
    "L": "", 
 
    "V": ["1", "2", "3"] 
 
    }, 
 
    { 
 
    "F": "Age Max", 
 
    "H": "Age Max", 
 
    "L": "", 
 
    "V": ["12", "30", "4"] 
 
    } 
 
] 
 

 
var result = data.reduce(function(result, field, init) { 
 
    field.V.forEach(function(value, i) { 
 
    if (!init) result[i] = {} 
 
    result[i][field.F] = +value 
 
    }) 
 
    return result 
 
}, []) 
 

 
console.log(result)
.as-console-wrapper { min-height: 100%; }