2017-10-01 6 views
1

Je passe cela aux données de fonction (tableau):Tableau de tableaux à la liste des dictionnaires

[ 
[ 
    ['firstName', 'Joe'], ['lastName', 'low'] 
    ], 
[ 
    ['firstName', 'Steph'], ['lastName', 'Roberts'] 
] 
] 

aimerait sortie:

[ 
{firstName: 'Joe', lastName: 'low'}, 
{firstName: 'Steph', lastName: 'Roberts'} 
] 

C'est ce que j'ai:

function Data(array) { 
var dict ={}; 
for(var j =0; j<=array.length-1; j++){ 
    for(var i=0; i<=array[0].length-1; i++){ 
    dict[array[j][i][0]] = array[j][i][1]; 
    } 
} 
return dict 
} 

Mais la sortie est incorrect:

{ firstName: 'Steph', 
lastName: 'Roberts', 
} 

Répondre

1

Substitute array[j] pour array[0] à i<=array[0].length-1;, définir un tableau en tant que propriété de dict objet

function Data(array) { 
 
    var dict = { 
 
    array: [] 
 
    }; 
 
    for (var j = 0; j <= array.length - 1; j++) { 
 
    let o = {}; 
 
    for (var i = 0; i <= array[j].length - 1; i++) { 
 
     o[[array[j][i][0]]] = array[j][i][1]; 
 
    } 
 
    dict.array.push(o) 
 
    } 
 
    return dict 
 
} 
 

 
console.log(Data([ 
 
    [ 
 
    ['firstName', 'Joe'], 
 
    ['lastName', 'low'] 
 
    ], 
 
    [ 
 
    ['firstName', 'Steph'], 
 
    ['lastName', 'Roberts'] 
 
    ] 
 
]).array);

1

On peut prendre un tableau en tant que résultat et prendre une seule dictinary pour chaque élément externe.

function getArrayOfObjects(array) { 
 
    var result = [], 
 
     dict, 
 
     i, j; 
 
     
 
    for (j = 0; j < array.length; j++) { 
 
     dict = {}; 
 
     for (i = 0; i < array[0].length; i++) { 
 
      dict[array[j][i][0]] = array[j][i][1]; 
 
     } 
 
     result.push(dict); 
 
    } 
 
    return result; 
 
} 
 

 
var array = [[['firstName', 'Joe'], ['lastName', 'low']], [['firstName', 'Steph'], ['lastName', 'Roberts']]]; 
 

 
console.log(getArrayOfObjects(array));

ES6 avec

function getArrayOfObjects(array) { 
 
    return array.map(a => Object.assign(...a.map(([k, v]) => ({ [k]: v })))) 
 
} 
 

 
var array = [[['firstName', 'Joe'], ['lastName', 'low']], [['firstName', 'Steph'], ['lastName', 'Roberts']]]; 
 

 
console.log(getArrayOfObjects(array));

2

Vous mettez à jour le même objet à chaque itération, à la place, vous devez créer un nouvel objet à chaque itération et le pousser à un tableau

function Data(array) { 
 
    var dict = []; 
 
    for(var j =0; j<=array.length-1; j++) { 
 
     dict[j] = {}; 
 
     for(var i=0; i<=array[0].length-1; i++) { 
 
      dict[j][array[j][i][0]] = array[j][i][1]; 
 
     } 
 
    } 
 
    return dict; 
 
} 
 

 
console.log(Data([ 
 
    [ 
 
     ['firstName', 'Joe'], ['lastName', 'low'] 
 
    ], 
 
    [ 
 
     ['firstName', 'Steph'], ['lastName', 'Roberts'] 
 
    ] 
 
]));

1

La réponse d'AvcS contient la raison pour laquelle votre code échoue. La solution de Nina est parfaite si vous pouvez utiliser un transpileur comme Babel, car le support du navigateur pour destructuring assignment semble plutôt mauvais.

Comme alternative, vous pouvez également utiliser map et reduce, ce qui simplifie peut-être le code nécessaire:

let inp = [ 
 
    [['firstName', 'Joe'], ['lastName', 'low']], 
 
    [['firstName', 'Steph'], ['lastName', 'Roberts']] 
 
]; 
 

 
let result = inp.map(
 
    entry => entry.reduce(
 
    (obj, keyvalue) => { 
 
     obj[keyvalue[0]] = keyvalue[1]; 
 
     return obj; 
 
    }, {}) 
 
); 
 

 
console.log(result);

Ne pas oublier d'ajouter peut-être polyfills pour map et replace et peut-être remplacer les let s et les fonctions de flèche.

0

Vous devez déclarer une variable de tableau pour la sortie souhaitée au lieu de l'objet. Objet va créer votre JSON mais vous voulez que les résultats JSON objet dans des formats de tableau

function Data(array) { 
var res=[]; 
var dict ={}; 
for(var j =0; j<=array.length-1; j++) 
{ 
for(var i=0;i<=array[0].length-1; i++) 
{ 
dict[array[j][i][0]] = array[j][i][1]; 
} 
res.push(dict); 
} 
return res; 
} 
+0

Avez-vous essayé de courir ce code? Il contient plusieurs erreurs. – Stephan

+1

Merci @Stephan de signaler mon erreur –

+0

Un problème restant est que si une clé est présente seulement dans l'une des premières entrées, votre code n'efface pas 'dict'. – Stephan