배열은 순서에 대한 정보(인덱스)를 가지고 있는 참조형 데이터타입.
객체는 데이터에 의미를 부여함.(참조형 타입)
키가 확정적일 때만 사용
키가 유동적일 때 사용
1. 매개변수를 받을때
obj[property]
2. property: value 값을 넣을 때
obj[property] = value
키값들만 모아 배열을 반환함
반복문.
객체는 for in : key를 비교. array사용못함!
배열, 객체 등 반복가능한 객체에 모두 사용 가능(array, map, set, string..)
인덱스가 아닌 키를 이용해 비교해야 하기 때문에 반복문을 쓰기 까다롭다.
obj[prop] 값 조회
객체에서 반복문 for in 활용
for(let prop in obj){
if(Array.isArray(obj[prop])){
delete obj[prop]
}
}
let count = 0;
for(let prop in obj){
count++;
}
return count;
다른방법
return Object.keys(obj).length;
//입력값 : ['a','b','c'], { a: 1, b: 2, c: 3, d: 4 };
//출력값 : { a: 1, c: 3 }
//obj의 키와 arr의 요소가 같으면 새로운 객체에 그걸 담아서 리턴
let newobj = {};
//객체의 키와 arr의 요소를 비교
//객체는 for in : key를 비교
//배열은 for of
for(let prop in obj){
for(let ele of arr){
if(prop === ele) {
newobj[prop] = obj[prop];
}
}
}
//입력: [배열안에{객체},{객체}]
let user = [
{
id: 1,
user_name: '객체',
level: 19;
},
{
id: 2,
user_name: '배열',
level: 25;
},
...
]
if(!arr.length){
return 'no name';
}
if(num > arr.length -1){
return arr[arr.length -1]['name'];
}
return arr[num]['name'];
객체 합치기
이미 해당 키가 존재하면 그대로 두고 없으면 추가
obj1을 돌아야 할까 obj2를 돌아야 할까? 2를 돌고 1에서 확인한다.
1. 객체가 {a: undefined}일때 사용할수x
for(let prop in obj2){
if(obj[prop] === undefined){
obj1[prop] = obj2[prop];
}
}
2.
for(let prop in obj2){
if(!obj1.hasOwnProperty(prop)){ //없을때
obj1[prop] = obj2[prop];
}
}
3. for in
for(let prop in obj2){
if(!(prop in obj1)){ //없을때
obj1[prop] = obj2[prop];
}
}
//문자열 입력 'banana'
//객체를 리턴 {b: 1, a: 3, n: 2}
//{str의 각 문자: 나온 횟수}
let obj = {};
//str을 돌면서 각 문자를 확인.
for(let i = 0; i < str.length; i++){
//첫번째반복 str[i] -> b
//두번째반복 str[i] -> a
//b를 키로 넣어준다.
if(!obj[str[i]]){
obj[str[i]] = 0; //{b: 0, a: 0}
}
obj[str[i]]++; //{b: 1 a: 1}
}
가장 많이 반복되는 문자
제일 큰거, 긴거 -> str[0]이 제일 크다고 가정하고 비교함
{b: 1, a: 3, n: 2} -> 3이 나와야 함
let mostLetter = '';
let count = 0;
let obj = {};
for(let i = 0; i < str.length; i++){
//공백은 건너뛴다 -> continue
if(str[i] === ' '){
continue;
}
if(!obj[str[i]]){
obj{str[i]] = 0;
}
obj[str[i]]++; //{b: 1, a: 3, n: 2}
//첫번째 반복에서 b가 obj에 들어가면,
//mostLetter -> a
//count -> 2
//만약에 방금 ++한게 count보다 크면
//mostLetter랑 count 둘다 교체
if(obj[str[i]] > count){
count = obj[str[i]];
mostLetter = str[i];
}
}