【发布时间】:2015-02-24 23:04:11
【问题描述】:
首先,很抱歉我的问题很幼稚。我正在自学 Javascript,但我并不真正理解错误。
var centuryGroup = grouping(ancestry, function(person){
return Math.ceil(person.died/100);
});
function grouping(array, group){
var groups = {};
array.forEach(function(element) {
var groupName = group(element);
if(groupName in groups){
groups[groupName].push(element); //the error is stated at this line
}
else{
groups[groupName] = element;
}
});
return groups;
}
如上所述,错误在
groups[groupName].push(element);
如果我删除它,它会起作用。
并且,如果它定义为:
function grouping(array, group) {
var groups = {};
array.forEach(function(element) {
var groupName = group(element);
if (groupName in groups)
groups[groupName].push(element);
else
groups[groupName] = [element];
});
return groups;
}
var centuryGroup = grouping(ancestry, function(person) {
return Math.ceil(person.died / 100);
});
第二个没有错误。 *第二个代码取自教程。
我尝试过的事情:
- 我把“var CenturyGroup = ...”放在函数分组下面...仍然没有区别
- 当我注释掉错误行时,我已确保代码正常工作
- 我已从 if 和 else 语句中删除了 {},但错误仍然存在(我并不认为它会产生影响)
*确切的错误是“TypeError undefined is not a function”
我很茫然。 谢谢大家的帮助
*编辑。
传入的“数组”的内容是
{ name: "Carolus Haverbeke" }
sex: "m"
born: 1832
died: 1905
father: "Carel Haverbeke"
mother: "Maria van Brussel"
{ name: "Emma de Milliano" }
sex: "f"
born: 1876
died: 1956
father: "Petrus de Milliano"
mother: "Sophia van Damme"
...
顺便说一句,如果它不应该具有“push”属性,那么第二个代码不应该工作。但它是并且它正在显示预期的结果。 *困惑
已解决! 这是我在
中的错误元素
感谢 Pointy 为我指出了这个错误。正如他所说,它的原因是它不是一个数组,因此 .push 不起作用。但是一旦我将它作为 [element] 并将其放入数组中,那么我将能够将它作为数组的对象 .push 。谢谢大家
【问题讨论】:
-
这个错误意味着
groups[groupName]所指的任何东西都没有push属性。也就是说,您的代码假定它是一个数组,但它是某种其他类型的对象。教程中element周围的[ ]是关键。 -
出于好奇,您为什么将“else”语句中的
[element]更改为element? -
不是一个直接的答案,但你可以使用像 lodash 或 underscore 这样的库,它们确实提供了一些常见的基本功能,比如摸索
-
@HarishR 哇,我需要再次查看这些库
-
到@Pointy,哇。那是错误。它应该是[元素]。但为什么呢?
标签: javascript