【发布时间】:2019-06-10 23:12:52
【问题描述】:
我的目标如下:
创建一个函数 groupBy,它接受一个数组和一个回调,并返回一个对象。 groupBy 将遍历数组并对每个元素执行回调。回调的每个返回值都将保存为对象上的键。与每个键关联的值将是一个数组,其中包含在传递给回调时产生该返回值的所有元素。
以下代码成功执行:
function groupBy(array, inputFunc) {
let obj = {};
for(let i of array){
let key = inputFunc(i);
// QUESTION on line of code below:
console.log(obj[key])
if(obj[key] === undefined){
obj[key] = [];
}
obj[key].push(i)
}
return obj;
}
// Uncomment these to check your work!
const decimals = [1.3, 2.1, 2.4];
const floored = function(num) { return Math.floor(num); };
console.log(groupBy(decimals, floored)); // should log: { 1: [1.3], 2: [2.1, 2.4] }
但我对代码有点困惑。具体来说,当我这样做时:
console.log(obj[key])
上面的代码行似乎返回:
undefined
undefined
[ 2.1 ]
undefined
为什么打印未定义?那是从哪里来的?
因为我不明白 undefined 来自哪里,所以我不明白为什么需要 if 语句。
【问题讨论】:
-
因为数组排序,函数执行时,会搜索obj中是否有“1”而没有,所以打印
undefined,然后搜索“2”,即@ 987654325@ 然后将其添加到obj后,它会打印 2.1,因为 "2" (key) 中有值,即 [2.1] 因为函数推送到 "2" (key) 2.1 (array) 然后它变为 [2.1] 并且不应打印最后一个undefined但我认为它来自浏览器控制台
标签: javascript function object if-statement keyvaluepair