2016-05-12 9 views
-1

Ich arbeite daran, Legacy-Code zu reparieren. Ich habe ein Beispiel gemacht und die Ergebnisse werden folgen. Dies ist ein Beispiel für das alte Array.Schlüsselpaare richtig einfügen Javascript

var old = { 1: ['A', 'E', 'I', 'O', 'U'] }; 

Dies sollte sein, was

var expected = { a: 1, e: 1, i: 1, o: 1, u: 1 }; 

Jetzt

zurückgegeben , wenn ich dieses dieses Ergebnis
var ETL = function(){}; 

ETL.prototype.transform = function(old){ 
    var array = []; 
    for (var variable in old) { 
     console.log(variable); 
     for(var i = 0; i < old[variable].length; i++){ 
      var obj = {}; 
      var key = old[variable][i].toLowerCase(); 
      obj[key] = parseInt(variable); 
      array.push(obj); 
     } 
    } 
    return array; 
}; 

ich

verwenden
[ { a : 1 }, { e : 1 }, { i : 1 }, { o : 1 }, { u : 1 } ] 

Welche wirklich nahe ist, aber nicht ganz was ich suche. Ich glaube, ich habe ein Array von Objekten erstellt, wenn ich wirklich nur ein Objekt mit Schlüsselpaaren haben möchte. Ich denke, Schritt 1 ist, Array als ein Objekt neu zu deklarieren, und Schritt 2 besteht darin, den Code so zu bearbeiten, dass er mit einem Objekt anstelle eines Arrays arbeitet. Ich bin mir nicht sicher, wie ich das machen soll.

+0

Ja, ein Objekt verwenden, kein Array. Dann 'obj [Schlüssel] = parseInt (Variable)'. Und das ist alles. Beseitigen Sie den anderen überflüssigen Code für 'obj' und' push'. – deceze

Antwort

2
var obj = {}; 
for(var i = 0; i < old[variable].length; i++){ 

      var key = old[variable][i].toLowerCase(); 
      obj[key] = parseInt(variable); 
      //array.push(obj); 
     } 

Obj nur einmal deklarieren. Sie erstellen es in jeder Iteration der Schleife

+0

Dies funktionierte für mich, iteriert alle Daten korrekt in ein Objekt –

0

Sie können Array reduce Methode verwenden, um es zu lösen.

var old = { 1: ['A', 'E', 'I', 'O', 'U'] }; 
var _getOne = old['1']; //get value of key 1 

function getWordCnt(arr){ 
    return arr.reduce(function(prev,next){ 
     prev[next] = (prev[next] + 1) || 1; 
     return prev; 
    },{}); 
} 
console.log(getWordCnt(_getOne)) 

prüfen diese jsfiddle

Hinweis: Besser einen Schlüssel als String zu haben, statt einer ganzen Zahl

0

Unter der Annahme, dass Ihr haben viele Eigenschaften des Objekts jeweils mit einer Reihe von Großbuchstaben die folgenden die einzeilige Zuordnung wird alle in die neue Form bringen.

var old = { 1: ['A', 'E', 'I', 'O', 'U'], 
 
      2: ['B', 'T', 'O', 'M', 'V'], 
 
      3: ['C', 'B', 'X', 'N', 'S'] 
 
      }, 
 
newList = Object.keys(old).map(k => old[k].reduce((p,c) => {p[c.toLowerCase()] = k*1; return p},{})); 
 
document.write("<pre>" + JSON.stringify(newList,null,2) + "</pre>");

Verwandte Themen