2017-07-27 2 views
0

Ich habe einen Anfänger bei der Objektprogrammierung. Ich habe ein Objekt an der Chrome-Konsole angemeldet und konnte ein merkwürdiges Verhalten nicht übersehen.Chrome-Konsole zeigt Objekteigenschaft als undefined

Some objects properties appear as undefined and as if they had values at the same time

Einige Eigenschaften erscheinen als am Ende des Protokolls nicht definiert, sondern hat einen Wert an der Spitze.

Wenn ich das Objekt von meiner Funktion zurückgebe, kommt es mit denselben definierten Eigenschaften zurück, daher sind Dirty Sock und Microphone definiert. Warum denkt die Konsole, dass sie es nicht sind?

Mein Code:

function updateInventory(arr1, arr2) { 
    let currentInv = array2DToObject(arr1); 
    let newItems = array2DToObject(arr2); 
    console.log(currentInv); //This is the log I'm speaking about. 

    for(let key in currentInv) { 
    if(newItems.hasOwnProperty(key)) { 
     currentInv[key] = currentInv[key] + newItems[key]; 
     delete newItems[key]; 
    } else { 
     currentInv[key] = newItems[key]; 
     delete newItems[key]; 
    } 
    } 

    if(Object.keys(newItems === 0) && newItems.constructor === Object) { 
    return currentInv; 
    } else { 
    return 'A mistake has occured, newItems obj has not been emptied correctly'; 
    } 

    function array2DToObject (arr) { 
    return arr.reduce((acc, curr) => { 
     acc[curr[1]] = curr[0] ; 
     return acc; 
    }, {}); 
    } 
} 

Werte für arr1 und arr2 wie folgt sind:

arr1 = [ 
    [21, "Bowling Ball"], 
    [2, "Dirty Sock"], 
    [1, "Hair Pin"], 
    [5, "Microphone"] 
]; 

arr2 = [ 
    [2, "Hair Pin"], 
    [3, "Half-Eaten Apple"], 
    [67, "Bowling Ball"], 
    [7, "Toothpaste"] 
]; 
+0

Was ist der Wert von 'arr2', den Sie übergeben? – Kevin

+0

@Kevin Werte für 'arr1' und' arr2', die zu der Frage –

+0

hinzugefügt wurden Es sieht so aus, als wäre Ihr Fehler in den Namen. Hinweis Hair Pin und Bowling Ball haben Werte und sind die beiden gebräuchlichen Namen zwischen den Arrays. Die Arrays können nicht implizit eine Verbindung zwischen "Half-Eaten Apple" und "Dirty Sock" oder "Microphone" herstellen – Kevin

Antwort

1

Die Info-Box am Ende Ihrer console.log Ausgabe (in der Chrome-Konsole) ist wahrscheinlich um zu sagen, dass die Ausgabe gerade neu berechnet wurde. Wenn Sie den Zustand Ihrer Objekte zum Zeitpunkt der Ausgabe wissen möchten, würde ich vorschlagen, zuerst eine Zeichenfolge zu erstellen und dann auszugeben. In Ihrem Beispiel versuchen Sie:

console.log(JSON.stringify(currentInv)); 

Und dann sehen, was passiert.

Verwandte Themen