簡體   English   中英

Javascript錯誤未定義不是函數

[英]Javascript Error undefined is not a function

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. 我已經從 if 和 else 語句中刪除了 {} 並且錯誤仍然存​​在(不是我希望它有所作為)

確切的錯誤是

TypeError undefined 不是函數

傳入的“數組”的內容是

{ 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語句中您沒有創建新數組,僅此而已。 任何不是 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

PS不要在沒有打開/結束花括號的情況下使用if/else語句,有一天你會在腳上開槍......

if (groupName in groups) {
  groups[groupName].push(element);
} else {
  groups[groupName] = [element];
}

這是我的錯誤

element <== 在 else 語句中的第一個代碼中應該是[element]

這是因為它不是數組,因此.push不起作用。 但是一旦我將它作為[element]並將其放入數組中,那么我將能夠.push它作為數組的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM