2017-07-27 21 views
0

私はオブジェクトプログラミングに関する初心者です。私は、オブジェクトをChromeコンソールに記録していて、奇妙な動作に気付かなかった。Chromeコンソールでオブジェクトプロパティが定義されていないと表示されます

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

一部のプロパティには、ログの一番下にあるとして、未定義表示されますが、一番上に値を持っています。

オブジェクトを関数から返すと、同じプロパティが定義された状態で返されます。したがって、Dirty SockMicrophoneが定義されています。では、なぜコンソールはそうではないと思いますか?

マイコード:arr1arr2ため

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; 
    }, {}); 
    } 
} 

値は以下の通りです:

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

あなたが渡している 'arr2'の値は何ですか? – Kevin

+0

質問に「arr1」と「arr2」の値が追加されました –

+0

名前にエラーがあるようです。注意ヘアピンとボウリングボールは値を持ち、配列間の2つの共通名です。これらの配列は、 "Half-Eaten Apple"と "Dirty Sock"または "Microphone"の間に暗黙的に接続することはできません – Kevin

答えて

1

(クロームコンソールで)あなたはconsole.log出力の末尾に情報ボックスの可能性があります出力がちょうど再計算されたことを示す。出力時にオブジェクトの状態を知りたい場合は、まず文字列を作成して出力することをお勧めします。あなたの例では、次のように試してみてください:

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

次に何が起こるかを見てください。

関連する問題