그래서 나는 끊임없이 다음과 같은 형식의 개체를 검색됩니다배열 내에서 forfor를 확인하는 방법은 무엇입니까?
student: {
"student_id": "12345",
"location": "below",
},
]
},
]
당신을 감사 대답에 동의하고 찬성 투표한다! 트릭을 할해야이 같은
그래서 나는 끊임없이 다음과 같은 형식의 개체를 검색됩니다배열 내에서 forfor를 확인하는 방법은 무엇입니까?
student: {
"student_id": "12345",
"location": "below",
},
]
},
]
당신을 감사 대답에 동의하고 찬성 투표한다! 트릭을 할해야이 같은
뭔가 다음과 같이
var students = [];
function addStudent(student) {
// Check if we already know about this student.
var existingRecord = students.find(function (s) {
return s.student_id === student.student_id;
});
var classInfo = {
class_number: student.class_number,
location: student.location
};
if (!existingRecord) {
// This is the first record for this student so we construct
// the complete record and add it.
students.push({
student_id: student.student_id,
classes: [classInfo]
});
return;
}
// Add to the existing student's classes.
existingRecord.classes.push(classInfo);
}
당신은 다음을 호출하는 것입니다 : here 사용할 수
addStudent({
"student_id": "67890",
"class_number": "abcd",
"location": "below",
});
의 Runnable JSBin 예.
자세한 내용은 Array.prototype.find
at MDN입니다.
이 문제는 student_id
에 의한 색인 생성을 사용하여 해결할 수 있습니다. 예를 들어 :
var sourceArray = [{...}, {...}, ...];
var result = {};
sourceArray.forEach(function(student){
var classInfo = {
class_number: student.class_number,
location : student.location
};
if(result[student.student_id]){
result[student.student_id].classes.push(classInfo);
} else {
result[student.student_id] = {
student_id : student.student_id,
classes : [classInfo]
}
}
});
// Strip keys: convert to plain array
var resultArray = [];
for (key in result) {
resultArray.push(result[key]);
}
는 또한 student_id
또는 일반 배열 resultArray
에 의해 색인 오브젝트를 포함 result
형식을 사용할 수 있습니다.
이전 답변이 적용되었습니다. 관계없이 upvoted;) –
감사. 예, 이전 답변은 find()와 같은 메서드를 사용하지 않기 때문에 코드가 더 빨라졌습니다. 이것은 대형 배열에 특히 중요합니다. – IStranger
'student' 객체 하나를 사용하여 성공적으로 추가 할 수 있었지만 동일한 'student_id' 두 개의'student' 객체를 추가하려고하면 첫 번째'classInfo' 객체가 제대로 추가되었습니다 두 번째'classInfo' 객체가 올바른 위치에 추가되었지만 그 안에'student_id'가 추가되었습니다. 문제의 원인은 어디입니까? 로그 테스트를 시도했지만 찾을 수 없습니다. 다시 한번 감사드립니다. jabclab –
이전 댓글을 무시하십시오. 내 실수 였어. 정말 고맙습니다! 답변을 수락하고 upvoted. 그러나 학습 목적을 위해'students.find (function (s)) '은 무엇을하고 있습니까? –
@JoKo 도움이 되셨습니다 :-)'Array.prototype.find'에 대한 자세한 내용은 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find에서 확인하실 수 있습니다. – jabclab