2017-07-27 63 views
0

我在对象编程上有一个新手。我正在向Chrome控制台记录一个对象,并且无法注意到一个奇怪的行为。Chrome控制台显示对象属性为undefined

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

某些属性出现在日志底部为未定义,但对顶部的值。

当我从我的函数返回对象时,它将返回那些相同的属性定义,因此Dirty SockMicrophone被定义。那么为什么控制台认为他们不是?

我的代码:

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

arr1arr2如下:

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

@Kevin将“arr1”和“arr2”的值添加到问题 –

+0

看起来您的错误出现在名称中。注意发夹和保龄球有值,是阵列之间的两个常用名称。阵列不能隐式地在“Half-Eaten Apple”和“Dirty Sock”或“Microphone”之间建立连接 – Kevin

回答

1

在你的console.log输出端的信息框(在Chrome控制台)可能说明输出刚刚被重新计算。如果你想在输出的时候知道你的对象的状态,我会建议先创建一个字符串然后输出。在你的例子中,尝试:

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

然后看看会发生什么。

相关问题