const fruits = [
"apple",
"banana",
"orange",
"kiwi",
"mango",
"grape",
"dragonfruite",
"tangerin",
];
let arr = [];
// let num = 0;
// while (num < 3) {
// console.log(num);
// num++;
// }
// for (let i = 0; i < fruits.length; i++) {
// //arr = fruits[i];
// //console.log(arr);
// //console.log(fruits[i]);
// arr.push(fruits[i]);
// } //일반 for문
// console.log(arr);
// for (let fruit of fruits) {
// //console.log(fruit); //for of
// arr.push(fruit);
// }
// console.log(arr);
// fruits.forEach((fruit, index, array) => {
// //console.log(fruit, index, array);
// arr.push(fruit, index, array);
// }); // forEach 배열안의 각각요소에 정해진 콜백함수를 실행함, 매개변수...
// console.log(arr);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// // 배열을 스트링으로 만들기!!!!!!!!!!!!!!!!!!!!
// const result = fruits.join(",");
// // const result = fruits.join('|');
// // const result = fruits.join(', and ');
// // join은 배열에있는 모든 아이들을 더해서 스트링으로 리턴해줌.
// // 자동으로 쉼표가 들어감
// console.log(result); // 스트링으로 리턴됨
// arr.push(result); //다시 배열로 ㅋ
// console.log(arr);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//문자열을 배열로 만들기
// const words = "apple, banana, curcumber";
// const result = words.split(",");
// const result = words.split(",",2);
// console.log(result);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//배열의 순서를 거꾸로 만들어라.//배열자체를 아예 거꾸로만들어버림.
// const result = fruits.reverse();
// console.log(result);
// console.log(fruits);
//근데 이것도 배열 자체를 변형시켜버림 비추.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//배열에서 첫번쨰 두번쨰 요소 제외하고 나머지 리턴해라.
// const result = fruits.splice(0, 2);
// console.log(result);
// console.log(fruits);
// 근데 이것도 배열 자체를 변형시켜버림 비추.
//그러면
//const result = fruits.slice(2);//슬라이스는 배열은 안걸들고 2 하면 2번쨰 인덱스부터 끝까지하고
// const result = fruits.slice(2,5);//2,5 하면 2번째부터 5번쨰까지만 리턴함
// console.log(result);
// console.log(fruits);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Student {
constructor(name, age, enrolled, score) {
this.name = name;
this.age = age;
this.enrolled = enrolled;
this.score = score;
}
}
const students = [
new Student("A", 29, true, 45),
new Student("B", 28, false, 80),
new Student("C", 30, true, 90),
new Student("D", 40, false, 66),
new Student("E", 18, true, 88),
];
// 90점 맞은 학생 찾아라. 하나만 리턴해줌
// const result = students.find((student) => {
// //console.log(student, index);
// return student.score === 90;
// });
// console.log(result);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//수업에 등록enrolled 한 학생만 골라내라. 배열로 리턴해라 즉, 여러개를 리턴해야함.
// const result = students.filter((student) => student.enrolled);
// console.log(result);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//점수만 리턴해라 배열로.
//map은 지정된 콜백함수를 호출하면서,
//각각의 요소들을 함수를 거쳐서, 새로운 값으로 배열로 변환해줌.
//즉, 함수의 기능에 따라 맵핑 되어서 변환되어 배열로 만들어진다.
//const result = students.map((student) => student.score);
// const result = students.map((student) => student.score * 2); //두배로 설정 해줄수도 있고, 여튼 로직, 기능,을 짤 수 있음
// console.log(result);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//50점 밑으로인 학생을 불리언으로 확인해라.
// const result = students.some((student) => student.score < 50);
// console.log(result);
// const result2 = !students.every((student) => student.score >= 50);
// console.log(result2); //50보다 높거나 같은것 인데 앞에 느낌표 해서 반대로~
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//학생들의 평균 점수 구하기
// const result = students.reduce((이전값, 현재값) => { //이전값은 이전에 콜백함수에서 리턴된 값 이 전달되어져 오고, 현재값은 배열의 아이템을 순차적으 전달받는다.
// console.log(이전값, 현재값);
// //return 이전값;
// //return 현재값;
// return 이전값 + 현재값.score;
// }, 0); // 여기 0은 초기값 설정해줌
// console.log(`최종합계값 ${result}`);
//console.log(`평균값 ${result / students.length}`);
//리듀스는 우리원하는 초기값(시작점)부터, 모든 배열을 돌면서, 어떤 값을 누적할때 쓰는것임.
//const result = students.reduceRight((이전값, 현재값) => { //리듀스 롸잇은 거꾸로 시작함
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//학생들의 모든 점수를 받고, 50이상인 애들만 필터해서, 스트링으로 변환하기
//map 으로 배열로 받아놓은다음,
//filter 해서 거르고,
//join으로 스트링으로 바꾸기
// const result = students
// .map((student) => student.score)
// .filter((score) => score >= 50)
// .join();
// console.log(result);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//점수를 낮은점수에서 높은점수 대로 정렬하고, 결과값은 스트링으로 리턴해라.
// const result = students
// .map((student) => student.score)
// .sort((a, b) => a - b)
// .join();
// console.log(result);
//sort 는 정렬인데,
//콜백함수에는 이전값과 현재값이 전달이 되는데,
//마이너스 값을 리턴하게 되면, 첫번쨰가 뒤에꺼보다 작다고 간주되어짐.
//.sort((a, b) => b - a ) 이렇게 큰값이 앞으로 정렬되게 하려면 이렇게 하면되고,