2016-06-22 11 views
-3

Objekt ändern, wenn ich ein Ergebnis wie dieses:Schlüssel/Wert eines

result = [ 

    { '0': 'grade', A: 'name', b1: 'number' }, 
    { '1': 'grade', B: 'name', b2: 'number' }, 
    { '2': 'grade', C: 'name', b3: 'number' } 
]; 

Wie kann ich produzieren:

result = [ 

    { A: '0', b1: '0' }, 
    { B: '1', b2: '1' }, 
    { C: '2', b3: '2' } 
]; 

Ich möchte statt Namen und die Nummer der analogen Klasse zu übergeben.

+1

Warum 'b3: '1''.? –

+0

Raten Sie das ist ein Tippfehler? –

+0

Könnten Sie das posten, was Sie bereits versucht haben, dies zu lösen? – gcampbell

Antwort

1

Die Reihenfolge der Schlüssel in einem Objekt nicht garantiert sind. Dies bedeutet, dass es einfach nicht funktioniert, ein Schlüsselarray zu bekommen und durch sie zu durchlaufen oder auf sie per Index zuzugreifen. Sie könnten diese Arbeit machen, numerische und nicht-numerische Schlüssel wie folgt zu entdecken:

result = [ 
    { '0': 'grade', A: 'name', b1: 'number' }, 
    { '1': 'grade', B: 'name', b2: 'number' }, 
    { '2': 'grade', C: 'name', b3: 'number' } 
]; 

result.forEach(item => { 
    var keys = Object.keys(item); 
    var numericKey = keys.find(key => !isNaN(key)); 
    var nonNumericKeys = keys.filter(key => isNaN(key)); 

    nonNumericKeys.forEach(nonNumKey => item[nonNumKey] = numericKey); 
    delete item[numericKey]; 
}); 
+0

: Ich versuche es ohne das =>, mit keys.find (function (key) {{ich kann es nicht funktionieren! Sobald ich das oben für die keys.find schreiben, es funktioniert nicht wie erwartet.Können Sie aktualisieren Sie sich diesbezüglich? Vielen Dank. – George

+0

Das sollte sein, was Sie wollen: https://jsfiddle.net/w9g0f9yt/ –

+0

: Ah! Ich vergaß die Rückkehr ... Danke! (Upvoted) – George

-1

Mit ES6 Sie die für Schleifen und Objects.keys für diese Aufgabe verwenden: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/let

let newResult = []; 
for(let r of result) { 
    let keys = Object.keys(r); 
    let obj = {}; 
    for(let key of keys) { 
    if(/\d/.test(key)) { var value = key; } 
    else if(/\w/.test(key)) { var key1 = key; } 
    else if(/\d/.test(key)) { var key2 = key; } 
    } 

    obj[key1] = value; 
    obj[key2] = value; 
    newResult.push(obj); 
} 
return newResult; 
+0

Reihenfolge der Schlüssel in einem Objekt ist nicht garantiert. Dies funktioniert möglicherweise nicht wie erwartet. –

0

Angenommen, die b3: '1' Teil ist ein Tippfehler ... die folgende sollte arbeiten.

var input = [ 
 
    { '0': 'grade', A: 'name', b1: 'number' }, 
 
    { '1': 'grade', B: 'name', b2: 'number' }, 
 
    { '2': 'grade', C: 'name', b3: 'number' } 
 
]; 
 

 
function reverseMap(obj){ 
 
    var newObj = {}; 
 
    var keys = Object.keys(obj); 
 
    for(var i=0; i<keys.length; i++){ 
 
    var k = keys[i]; 
 
    var v = obj[k]; 
 
    newObj[v] = k; 
 
    } 
 
    return newObj; 
 
} 
 

 
var output = []; 
 
for(var i=0; i<input.length; i++){ 
 
    var reverseObj = reverseMap(input[i]); 
 
    var outputObj = {}; 
 
    var number = reverseObj.grade; 
 
    outputObj[reverseObj.name] = number; 
 
    outputObj[reverseObj.number] = number; 
 
    output.push(outputObj); 
 
} 
 

 
console.log(output);

Verwandte Themen