首先,对不起,我的问题是noobish。我自学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);
});
第二个没有错误。 *第二个代码来自教程。
我尝试过的事情:
*确切的错误是" TypeError undefined不是函数"
我不知所措。 感谢帮助人员
*编辑。
" array"的内容传入的是
{ 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"
...
顺便说一句,如果它不应该有"推"财产,第二个代码不应该工作。但它确实显示了预期的结果。 *混淆
解决了!
中我的错误元素< ==在else语句中应该是[element]
的第一个代码中
感谢Pointy为我指出了这个错误。它的原因是他说它不是一个数组,因此.push不起作用。但是,一旦我把它作为[元素]并将其变成一个数组,那么我将能够将它作为数组的对象推送出来。感谢所有
答案 0 :(得分:1)
else
语句中的您没有创建新数组,就是这样。任何不是aray的东西都没有push()
功能。您在else语句中的代码应该是:
groups[groupName] = element;
应该是:
groups[groupName] = []; // Create empty array
groups[groupName].push('element'); // push an element to array
或者:
groups[groupName] = [element]; // create array with one element
P.S。
不打开/结束花括号时不要使用if/else
语句,有一天你会用脚射击自己......
if (groupName in groups) {
groups[groupName].push(element);
} else {
groups[groupName] = [element];
}
答案 1 :(得分:1)
这个问题已在问题的评论中得到解答,答案已编入问题本身。