0
我在对象编程上有一个新手。我正在向Chrome控制台记录一个对象,并且无法注意到一个奇怪的行为。Chrome控制台显示对象属性为undefined
某些属性出现在日志底部为未定义,但对顶部的值。
当我从我的函数返回对象时,它将返回那些相同的属性定义,因此Dirty Sock
和Microphone
被定义。那么为什么控制台认为他们不是?
我的代码:
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
和arr2
如下:
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"]
];
你传入的'arr2'的值是多少? – Kevin
@Kevin将“arr1”和“arr2”的值添加到问题 –
看起来您的错误出现在名称中。注意发夹和保龄球有值,是阵列之间的两个常用名称。阵列不能隐式地在“Half-Eaten Apple”和“Dirty Sock”或“Microphone”之间建立连接 – Kevin