2017-03-13 5 views
0

Ich habe eine Art von Referenz Problem in Javascript-Sammlung. HierReferenz Problem in Javascript-Sammlung

ist die Plunker ->plunker

Das Problem ist, wenn ich

approverSteps[0].loadedApprovers.push({prop1: 'test'}); 

Dann wird die loadedApprovers Eigenschaft des zweiten Elements tue in der approverSteps Sammlung dh (approverSteps 1) wird auch immer aktualisiert . Ich weiß, dass es ein Bezugsproblem ist, aber eine Idee, wie man es beheben kann.

Vielen Dank im Voraus.

+0

Sie sollten Ihren Code in Frage stellen und beschreiben das eigentliche Problem, das Sie stoßen - was passiert, was Sie passieren erwarten, wie sie anders sind, usw. – pvg

Antwort

0

Alle Elemente erhalten ihre loadedApprovers Array als eine Referenz auf das gleiche leere Array.

const approvalStepDefault = { 
    loadedApprovers: [] // this array 
}; 

Arrays werden auch als Referenz übergeben (sie sind Objekte).

Versuchen Sie folgendes:

// no need for approvalStepDefault 

let data = { 
    steps: [{id: '01'},{id: '02'}] 
}; 

let approverSteps = (data.steps || []).map(item => { 
    const obj = Object.assign({}, item); // copy item so the original item will remain intact (remove this line if you don't want to work on a clone) 
    obj.loadedApprovers = [];    // brand new array for each object 
    return obj; 
}); 

approverSteps[0].loadedApprovers.push({prop1: 'test'}); 
console.log(approverSteps); 
Verwandte Themen