slice()
메소드는 begin부터 end 전까지의 복사본을 새로운 배열 객체로 반환한다. 즉, 원본 배열은 수정되지 않는다.
splice()
메소드는 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경한다. 이 메소드는 원본 배열 자체를 수정한다.
입출력예시
const arr = ['a', 'c', 'e'];
const obj = { a: 1, b: 2, c: 3, d: 4 };
let output = select(arr, obj);
console.log(output); // --> { a: 1, c: 3 }
function select(arr, obj) {
// obj 객체 key에서 arr 배열의 엘리먼트와 같은게 있으면
//그것만 빼서 새로운 객체로 만들어주기
//새로운 객체를 먼저 선언
//for문을 2번 도는데 전달인자로 객체,배열 둘다 반복해주어야하기 때문에
let result = {};
//객체반복문
for(let key in obj) {
//배열반복문
for(let i = 0; i < arr.length; i++) {
//이제 이 안에서 key는 obj의 필드를 말하는 변수가 됌.
//arr[i]는 배열의 엘리먼트를 말하는 변수가 됌
//그래서 얘네 둘이 같다면 새로운 객체에 그 키와 벨류를 담아줘
if(key === arr[i]) {
result[key] = obj[key]; //할당
}
}
}
return result
}
입출력예시
let output = countAllCharacters('banana');
console.log(output); // --> {b: 1, a: 3, n: 2}
function countAllCharacters(str) {
//새로운 객체 선언
// 스트링 문자를 하나하나 살펴본다 --> 반복문으로
//빈 객체에 각 철자를 키로 할당하고 값으로 1을 준다.
//만약 이미 키로 할당된 철자라면 값에서 1로 할당한 값을 1 또 추가해준다
let newObj = {}
for(let i = 0; i < str.length ; i++) {
//해당 철자로 된 키가 객체에 없을 경우엔 키를 할당 그값은 1로준다
if (newObj[str[i]] === undefined) {
newObj[str[i]] = 1
}else{
//여기로 분기된다면 이미 객체에 해당 철자의 키가 존재함
//그럼 우리는 뭘하냐 카운팅 1을 추가
newObj[str[i]] ++
}
}
return newObj
}
입출력예시
let output = mostFrequentCharacter('apples not oranges');
console.log(output); // --> 'p'
output = mostFrequentCharacter('hello world');
console.log(output); // --> 'l'
output = mostFrequentCharacter(' ');
console.log(output); // --> ''
코드
function mostFrequentCharacter(str) {
let obj = {mostFrequent:'', mostCount: 0}
for(let i = 0 ; i < str.length ; i++){
if(str.length === 0){
return ''
}
if(obj[str[i]] === undefined && str[i] !== ' '){
obj[str[i]] = 0
}
obj[str[i]] = obj[str[i]] + 1
if(obj[str[i]] > obj['mostCount']){
obj['mostCount'] = obj[str[i]]
obj['mostFrequent'] = str[i]
}
}
return obj['mostFrequent']
}
//변수obj를 선언한다. {mostFrequent :'' ,mostCount: 0}을 할당한다.
//for문을 만든다. i = 0 ; i < str.length ; i++
//만약 str의 길이가 0이라면 (빈문자열을 입력받는다면)
//''빈 문자열을 리턴한다.
//만약 obj[str[i]]의 값이 undefined이고
//' '이 아니라면(' '스페이스바를 입력받으면 count되지 않게하기위해)
//obj[str[i]]의 값은 0으로 초기화된다.
//obj[str[i]]의 값은 1씩 추가된다
//만약 obj[str[i]] 가 obj['mostFrequent']보다 크다면
//obj['mostFrequent'] 는 str[i]이다.
//obj['mostCount']는 obj[str[i]]이다.
//obj['mostFrequent']를 리턴한다.
obj[str[i]]
의 값이 undefined
라면 obj[str[i]
의 값은 0으로 초기화된다. 이코드를 작성한 이유는 가장먼저 횟수에 도달한 문자를 리턴하기 위해서이다.
예를들어서 {a :}
이렇게 키만있고 값이 없으면 값은 undefined이다.
예를들어 'abcddcba'
같은 모두 횟수가 같은 문자열이 str에 들어가면 가장먼저 도달한 문자 'd'를 찾아야한다. 처음 입력된 key의 값이 undefined라면 처음 들어가는 것이라는 뜻이고 숫자라면 이미 키가 한번 들어갔다는 뜻이다. 처음으로 d가 2번나와서
d의 값이 2가 된 시점에 다른 letter들은 1이다. 이렇게 만들기 위해서 key만 입력된 객체라고 가정하는 것이다.
(키만 입력하고 값을 비워두는게 구글 콘솔에서는 안된다)