study/js

문제 풀이

FYE 2023. 2. 1. 23:01

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'
 
Reference Code
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]
 
Reference Code

 

내가 쓴 코드

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}
 
Reference Code
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최고...

 

for (let key in obj2) -> obj2 키를 보는데 
    if (!(key in obj1))  -> 만약  obj1의 키와 다르다면
       obj1[key] = obj2[key];  ->obj2[key]를 obj[1key]에 대입
 
이렇게 이해했는데 맞는지 모르겠다. 혹시 누군가가 보신다면 댓글 ..로 알려주세요ㅎㅎ
 

 

 

참고 레퍼런스

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/for...in

 

for...in - JavaScript | MDN

for...in문은 상속된 열거 가능한 속성들을 포함하여 객체에서 문자열로 키가 지정된 모든 열거 가능한 속성에 대해 반복합니다. (Symbol로 키가 지정된 속성은 무시합니다.)

developer.mozilla.org


 

한번에 문제를 맞추는 그 날까지....

너무 못해서 문제풀이하고있는데 진짜 부족함을 많이 느끼고있다.

왜 이제 문제풀이는 시작했는가

ㅎㅇㅌ..!