Javascript Error undefined不是一个函数

时间:2014-12-28 14:37:52

标签: javascript

首先,对不起,我的问题是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);
});

第二个没有错误。 *第二个代码来自教程。

我尝试过的事情:

  1. 我把" var centuryGroup = ..."在功能分组下面...仍然没有区别
  2. 我在确认错误行
  3. 时确保代码正常工作
  4. 我从if和else语句中删除了{},错误仍然存​​在(不是我希望它有所作为)
  5. *确切的错误是" 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不起作用。但是,一旦我把它作为[元素]并将其变成一个数组,那么我将能够将它作为数组的对象推送出来。感谢所有

2 个答案:

答案 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)

这个问题已在问题的评论中得到解答,答案已编入问题本身。