문자
는 이상하게 새로 할당하지 않으면 값이 바뀌지 않는다. (read-only
)
var str = 'abc';
str[0] = 'b'; //이렇게 값을 넣으면 'bbc' 로 바뀔 꺼라 생각 했지만
//str 의 값은 바뀌지 않는다 그렇다고 에러가 나오지도 않는다.
str // 'abc' ;
str = 'bbb' ;
str // 'bbb' ; 이렇게 새롭게 할당하면 값은 바뀐다.
let words =['abc','qwe','zxc']
words.indexOf('abc') // 0 배열에 'abc' 라는 요소가 있다면 그 요소의 인덱스를 준다.
words.indexOf('kkk'); // -1 존재 하지 않는다면 -1 을 준다.
//이걸 이용해서
words.indexOf('abc') !== -1 // true
words.indexOf('없지') !== -1 //false
근데 그냥 내장 메서드 includes
를 쓰자 IE 는 호환 안된다 이점 주의
let user = [ {name: 'hee',age:12},{name: 'kee',age:22},{name: 'aee',age:32},]
function output(user){
console.log('Name:' + user.name);
}
user.forEach(output);
////////출력 ////////
2 Name:hee
2 Name:kee
2 Name:aee
let user = [ {name: 'hee',age:12},{name: 'kee',age:22},{name: 'aee',age:32},]
let uName = [];
function pushName(user){
uName.push(user.name);
}
user.forEach(pushName);
uName
//(3) ["hee", "kee", "aee"]
이렇게 기존에 있던걸 전혀 바꾸지 않고 새로운 배열을 만들 수 있다.
그런데 이걸 좀더 간단하게 map
메서드를 사용해보자
function getName(user){
return user.name;
}
user.map(getName)
//(3) ["hee", "kee", "aee"]
map
으로 간단 하게 만들 수 이다.
특정 조건만 추출 하기
let serach = [];
undefined
for(let i=0; i<user.length; i++){
//20 이상인 것만 serach 에 담기
if(user[i].age > 20){
serach.push(user[i])
}
}
//2
serach
//(2) [{…}, {…}]
이걸 filter
메서드 를 사용해보자
function than20(user){
return user.age > 20;
}
user.filter(than20);
// 이렇게 하면 위와 동일한 값이 출력된다.
//배열을 문자열로
function joinName(result, uesr){
return result = result + user.name + ','
}
user.reduce(joinName,'') // , 뒤에 ''. 는 초기값
reduce
는 누적값 과 돌아가는 인자 가 있다.
단일 배열 만들기
let arr =[['hi',1],[123,4],[true,false]];
// 배열안의 배열들 을 단일 배열로 만들기
const join = arr.reduce(function(a,c){
return a.concat(c);
});
join
//(6) ["hi", 1, 123, 4, true, false]
배열 안 객체 안 배열의 값을 바꾸기
let studentList = [
{
name: 'Anna',
gender: 'female',
grades: [4.5, 3.5, 4],
},
{
name: 'Dennis',
gender: 'male',
country: 'Germany',
grades: [5, 1.5, 4],
},
{
name: 'Martha',
gender: 'female',
grades: [5, 4, 4, 3],
},
{
name: 'Brock',
gender: 'male',
grades: [4, 3, 2],
},
];
studentReports(studentList)
function studentInfo(students) {
// TODO: 여기에 코드를 작성합니다.
//여학생 만 필터 적용
let fe = students.filter(function(el){
return el.gender === 'female'
}); // 여학생 정보
function grade(el){ // 학점 정보
function gradesum(a,c){
return a + c
} return el.reduce(gradesum) / el.length; // 평점
}
function addfe(el){ //map 에서 불려질꺼라서 el 은 fe 의 정보
return el['grades'] = grade(el.grades); // fe 가 가지고 있는 녀석의 학점 에 평점을 덮어씌우는 함수
}
fe.map(addfe);
return fe;
}
// [
// { name: 'Anna', gender: 'female', grades: 4 },
// { name: 'Martha', gender: 'female', grades: 4 },
// ];