2014-10-13 2 views
-1
var person = { firstname: "", lastname: "", email: "" }; 
var student = Object.create(person); 

var i = 0; 
var flag = true; 

//create array of arrays. similar to a database. Receive unspecified number 
//number of inputs from user 
while (flag) { 
var input = prompt("Please enter fname, lname, and email"); 
//Sample input: John, Doe, [email protected]  

var results = input.split(", "); 

student[i]=({ 
firstname: results.shift(), 
lastname: results.shift(), 
email: results, 

}); 
i++; 


console.log(student[i].firstname);//testing code. returns student[i] is undefined 
console.log(student[0].firstname);//testing code. returns John. 
flag = confirm("Do you want to continue?"); 
}; 

이 코드를 실행하려고하면 student[i] is undefined 오류가 발생합니다.배열 배열의 속성 액세스? (자바 스크립트)

코드 바로 위에 student[i]의 값을 설정하더라도. 그러나 student[0].firstname을 출력하려고하면 John이 나옵니다.

편집이 : 심지어 앞에 배치

console.log(student[i].firstname); 

와 내가 그것을 당신은 증가하고

+3

당신은 증가하고 접근한다 로깅 명령문 앞에 'i'가 있습니다. – steveax

+0

@steveax 학생을 아직 해결하지 못했습니다. [i] 정의되지 않았습니다. – user3551329

+1

사람들이 답변 한 후에 코드를 크게 편집하지 마십시오. 당신의 변화하는 '++'는 모든 대답을 무효로 만들었습니다. –

답변

0

을 isn'tworking ++ i다음 배열을 조회. 따라서 새 항목을 넣으면 결과를 다시 쿼리 할 때 인덱스 0을 말할 수 있습니다. 실제로 학생 1을 쿼리합니다. console.log 뒤에 i++;을 내립니다. 당신이 무엇에

0

봐는 :

student[i]=({ 
... 
i++; 
... 
console.log(student[i].firstname); 

그래서 당신은 student[i]을 설정합니다. 그런 다음 i을 증가 시키므로 더 이상 이전 값과 같지 않습니다. 그런 다음 해당 값을 사용하여 student의 속성에 액세스하려고 시도합니다.이 속성은 설정하지 않았기 때문에 존재하지 않습니다.

통화 순서를 변경해야합니다. 나는 i++가 블록의 맨 끝에 있어야한다고 상상한다.

0

student[i]을 할당 한 후 i++으로 전화하십시오. 이 설정은 i=1입니다. students[1]을 임의의 값으로 설정하지 않았습니다.

0

나는 당신이하고 싶은 일은 students 배열을 만들고 그 다음에 push 새 인스턴스를 만들고 싶다고 믿는다. i++;console.log(student[i].firstname);//testing code. returns student[i] is undefined 위의 난을 설정하고 있음을

var students = []; 
 
var flag = true; 
 

 
//create array of arrays. similar to a database. Receive unspecified number 
 
//number of inputs from user 
 
while (flag) { 
 
    var input = prompt("Please enter fname, lname, and email"); 
 
    //Sample input: John, Doe, [email protected]  
 

 
    var results = input.split(", "); 
 

 
    students.push({ 
 
     firstname: results.shift(), 
 
     lastname: results.shift(), 
 
     email: results[0], 
 

 
    }); 
 

 
    console.log(JSON.stringify(students)); //testing code 
 
    flag = confirm("Do you want to continue?"); 
 
};

+0

P. 공백없이 사용자 입력을 처리하기 위해 쉼표로만 구분할 수 있습니다 (공백 없음). 그렇게한다면, 거기에 있다면 각 값에서 선행 공백을 잘라내 길 원할 것입니다. 그러나이 문제는이 문제의 범위를 벗어납니다. –

+0

student [i] .firstname과 같은 것을 어떻게 접근 할 수 있습니까? 귀하의 코드를 실행했을 때 전체 학생 개체가 인쇄되었습니다. – user3551329

+0

언제든지 색인을 통해 학생에게 액세스 할 수 있습니다. 마지막으로 추가 된 학생의 이름을 얻고 싶다면'students [students.length - 1] .firstname'이 그것을 얻습니다. –

0

= 1

+1

이 답변은 작성 당시의 코드를 기반으로 기술적으로 정확합니다. OP는 코드를 변경하여 답변을 무효로 만들었습니다. –

+0

@ usert3551329 - 여전히 작동하지 않습니까? 방금 코드를 만들었고, 두 개의 콘솔 사이에 i ++를 이동 시켰습니다. 그것은 나에게 효과적이었습니다. – msimmons

0

하여 로그인 한 후 내가 ++를 이동하는 방식의 결과를 변경할 수는

var results = input.split(", "); 

     student[i]=({ 
      firstname: results[0], 
      lastname: results[1], 
      email: results[2] 

     }); 



     console.log(student[i].firstname);//testing code. returns student[i] is undefined 
     console.log(student[0].firstname);//testing code. returns John. 
     i++; 
+0

student [i]가 아직 정의되지 않았습니다. – user3551329

+0

결과에 액세스하는 방법을 변경하려면 업데이트해야합니다. 우리가 i ++를 옮긴 후에 학생 [i]는 정의되지 않았습니다. 그러나 firstname은 제대로 묶이지 않았습니다. –