2014-12-28 8 views
0

우선, 제 질문은 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. 나는 제거 한 경우와 다른 문 및

* 정확한 오류가 "형식 오류가 정의되지 않은이 여전히 오류 (나는 그것이 차이를 만든 것으로 기대하지 않는 것이)에서 {} 나는 기능이 아닙니다. "

나는 실종됐다. 도움 주셔서 감사합니다


* 편집. 그는 "푸시"속성이 안되는 경우

에 전달된다 "배열"의 내용은 그런데

{ 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" 
... 

이며, 제 2 코드가 작동 할 수 없습니다. 그러나 그것은 원하는 결과를 보여주고 있습니다. * 혼란스러운


솔트! 그것

요소에 내 실수 [요소]를해야 else 문에서 첫 번째 코드에서 < == 나를 위해 그런 실수를 지적 뾰족한에

감사합니다. 그 원인은 배열이 아니므로 .push가 작동하지 않는다고 말했기 때문입니다. 그러나 일단 그것을 [요소]로 넣고 배열로 만들면 배열의 객체로 그것을 넣을 수있게 될 것입니다. 모두에게 감사의 말

+1

오류는 'groups [groupName]'이 무엇이든간에 'push'속성이 없음을 의미합니다. 즉, 코드는 배열이라고 가정하지만 코드는 다른 종류의 객체입니다. 튜토리얼의'요소 '주위의'[]'가 핵심입니다. – Pointy

+0

왜 "else"문에서'[element]'를'element'로 바꾸 었습니까? – Pointy

+0

직접적인 대답은 아니지만 goping과 같은 일반적인 기본 기능을 제공하는 lodash 또는 밑줄과 같은 라이브러리를 사용할 수 있습니다. – harishr

답변

1

이 질문에 이미 질문 아래 코멘트에 대답되었습니다 if/else 문을 사용하지 마십시오 대답은 편집 해있다 질문 자체로

1

else 진술 당신은 새로운 배열을 만들지 않고있다. 그리고 aray가 아닌 것은 무엇이든 push() 기능이 없습니다.대신 다른 문에서 코드는해야한다 :

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 (groupName in groups) { 
    groups[groupName].push(element); 
} else { 
    groups[groupName] = [element]; 
} 
+0

내가 언급 한 것처럼 중괄호가없는 것은 자습서 모음에서 나온 것이고 중괄호가있는 것은 내 코드입니다. – Kiong

관련 문제