2016-08-29 8 views
0

Auf einer Schräg Anwendung ich folgendes Objekt mit einer Reihe von Anforderungen haben:Map-Objekt zu ändern Array von Objekten

var source = { 
    position: "xyz", 
    requirements: [ 
    { a: { code: "a1", name: "a1" }, b: { code: "b1", name: "b1" } }, 
    { a: { code: "a2", name: "a2" }, b: { code: "b2", name: "b2" } } 
    ] 
}; 

Ich brauche eine Kopie dieses Objekts zu erstellen, wie folgt:

var target = { 
    position: "xyz", 
    requirements: [ 
    { acode: "a1", bcode: "b1" }, 
    { acode: "a2", bcode: "b2" } 
    ] 
}; 

Es werden also nur die Codes "a" und "b" ausgewählt ...

Wie könnte man so ein Objekt am besten kartieren?

+1

'.map (x => {ACODE: xacode, bcode: xbcode}) ' – georg

Antwort

3

Sie können Object.assign() verwenden, um das Objekt in diesem Fall zu "kopieren". Dann einfach über die requirements Karte.

var source = { 
 
    position: "xyz", 
 
    requirements: [ 
 
    { a: { code: "a1", name: "a1" }, b: { code: "b1", name: "b1" } }, 
 
    { a: { code: "a2", name: "a2" }, b: { code: "b2", name: "b2" } } 
 
    ] 
 
}; 
 

 
var copy = Object.assign({}, source); 
 
copy.requirements = copy.requirements.map(item => { 
 
    return {acode: item.a.code, bcode: item.b.code} 
 
}); 
 

 
console.log(source); 
 
console.log(copy);

+0

Ich muss eine Kopie der Quelle erstellen, zB Ziel mit dem neuen Format. Die Quelle nicht ändern. Das ist das Senden von Ziel an eine API im erforderlichen Format, aber nicht das Format ändern möchten, dass der Client verwendet. –

+0

@MiguelMoura, Entschuldigung, ich habe diesen Fall verpasst. Ich habe die Antwort aktualisiert, um das Originalobjekt zu "kopieren". – KevBot

+0

mit einfach "var copy = source" würde nicht dasselbe wie Object.create machen? –

0

Sie können einfach Schleife um und tun dies

var source = { 
    position: "xyz", 
    requirements: [ 
    { a: { code: "a1", name: "a1" }, b: { code: "b1", name: "b1" } }, 
    { a: { code: "a2", name: "a2" }, b: { code: "b2", name: "b2" } } 
    ] 
}; 

var target ={}; 
var innerArray = []; 
for(var key in source) { 
    if (source.hasOwnProperty(key)) { 
    if(typeof source[key] === 'string') { 
     target[key] = source[key]; 
    } else { 
     for(var i = 0; i < source[key].length; i++) { 
     var temp = {}; 
     temp.acode = source[key][i].a.code; 
     temp.bcode = source[key][i].b.code; 
     innerArray.push(temp); 
     } 
     target[key] = innerArray;  
    } 
    } 
} 

console.log(target); 

hier die Geige ist https://jsfiddle.net/Refatrafi/Lgryf2kv/12/