문제 풀이
1. getValueOfNthElement
문제
배열과 수를 입력받아 수가 가리키는 인덱스에 해당하는 객체의 'name' 속성값을 리턴해야 합니다.
출력
- 해당되는 객체의 'name' 속성값을 리턴해야 합니다.
주의 사항
- 빈 배열을 입력받은 경우, 'no name'을 리턴해야 합니다.
- 배열의 범위를 벗어나는 인덱스를 입력받은 경우, 마지막 객체의 'name' 속성값을 리턴해야 합니다.
입출력 예시
let output = getValueOfNthElement([{ name: 'Kelly' }, { name: 'Anna' }], 1);
console.log(output); // --> 'Anna'
output = getValueOfNthElement([{ name: 'Kelly' }, { name: 'Anna' }], 2);
console.log(output); // --> 'Anna'
output = getValueOfNthElement(
[{ name: 'Jim' }, { name: 'Tim' }, { name: 'Pooh' }],
1
);
console.log(output); // --> 'Tim'
output = getValueOfNthElement([], 0);
console.log(output); // --> 'no name'
function getValueOfNthElement(arr, num) {
if (!arr.length) {
return 'no name';
} else if (num > arr.length - 1) {
return arr[arr.length - 1]['name'];
} else {
return arr[num]['name'];
}
}
!arr.length가 뭘까 싶어서 콘솔에 입력해보았다
!arr.length
>>false
arr가 빈배열이면 false가 나오니 ..!오호
내가 짠 코드
function getValueOfNthElement(arr, num) {
if(arr.length===0){
return 'no name'
}
else if (arr.length<=num){
return arr[arr.length-1]['name'];
}
else{
return arr[num]['name'];
}}
else if(arr.length<num)으로 코드를 짯었는데 안되길래 <=로 변경하였다.
arr =[{name:'Dwight'},{name:'Pam'}]
arr.length
>>2
arr.length를 했을때 2가 나오니까 인덱스는 0부터 시작하므로...
else if (arr.length-1<num)으로 고쳐주는게 맞을거 같다.!
function getValueOfNthElement(arr, num) {
if(arr.length===0){
return 'no name'
}
else if (arr.length-1<num){
return arr[arr.length-1]['name'];
}
else{
return arr[num]['name'];
}}
2. getAllButLastElementOfProperty
문제
객체와 키를 입력받아 키에 해당하는 값이 배열인 경우, 마지막 요소가 제거된 새로운 배열을 리턴해야 합니다.
주의 사항
- 주어진 키에 해당하는 값이 배열이고, 빈 배열이 아닌 경우에만 마지막 요소가 제거된 배열을 리턴해야 합니다.
- 그 외의 경우, 빈 배열을 리턴해야 합니다.
- 입력받은 객체를 수정하지 않아야 합니다.
입출력 예시
const obj = {
key: [1, 2, 3],
};
let output = getAllButLastElementOfProperty(obj, 'key');
console.log(output); // --> [1,2]
내가 쓴 코드
function getAllButLastElementOfProperty(obj, key) {
if( !Array.isArray(obj[key]) || !obj[key].length){
return [];
}
return obj[key].slice(0,-1);
}
위에 코드쓸때 !arr.length를 사용하길래
이번에 한번 써보았다.
!obj[key].length
obj[key].length ===0
3. extend
문제
두 개의 객체를 입력받아 두번째 객체의 속성들을 첫번째 객체에 추가해야 합니다.
출력
- 별도의 리턴문(return statement)을 작성하지 않습니다.
주의 사항
- 추가하려는 속성이 이미 첫번째 객체에 존재하는 경우, 기존 값을 그대로 둡니다.
- 두번째 객체는 수정하지 않아야 합니다.
입출력 예시
const obj1 = {
a: 1,
b: 2,
};
const obj2 = {
b: 4,
c: 3,
};
extend(obj1, obj2);
console.log(obj1); // --> {a: 1, b: 2, c: 3}
console.log(obj2); // --> {b: 4, c: 3}
function extend(obj1, obj2) {
for (let key in obj2) {
if (!(key in obj1)) {
obj1[key] = obj2[key];
}
}
}
이 문제 감을 못잡아서 풀다풀다 레퍼런스보고, 구글링쳐서 다른 풀이도 보고 했다..
아직 잘모르겠다 흑흑
중간에 과정을 보고 싶은데 console.log로 어떻게 찍어서 보는지?
for 변수 in 객체 ->for문과 다름
객체 내부를 접근 할 수 있다.로 이해
=> for...in 문은 상속된 열거 가능한 속성들을 포함하여 객체에서 문자열로 키가 지정된 모든 열거 가능한 속성에 대해 반복합니다.
const object = { a: 1, b: 2, c: 3 };
for (const property in object) {
console.log(`${property}: ${object[property]}`);
}
// Expected output:
// "a: 1"
// "b: 2"
// "c: 3"
console.log 이렇게 찍어 볼 수 있구나.. mdn최고...
참고 레퍼런스
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/for...in
for...in - JavaScript | MDN
for...in문은 상속된 열거 가능한 속성들을 포함하여 객체에서 문자열로 키가 지정된 모든 열거 가능한 속성에 대해 반복합니다. (Symbol로 키가 지정된 속성은 무시합니다.)
developer.mozilla.org
한번에 문제를 맞추는 그 날까지....
너무 못해서 문제풀이하고있는데 진짜 부족함을 많이 느끼고있다.
왜 이제 문제풀이는 시작했는가
ㅎㅇㅌ..!