본문 바로가기
개발 공부/웹개발

알고리즘_배열안의 배열 객체 만들기, 객체 오름차순 비교

by 크롱이크 2021. 5. 9.

개인 정보를 담은 배열을 입력받습니다.

조건에 맞게 각 개인의 전체 이름을 요소로 갖는 배열을 리턴해야 합니다.

조건1) firstName 과 lastName 이 모두 있으면 나타내고 하나만 있을때는 하나만 나타내줍니다.

조건2)사람들의 나이는 모두 다르고, 오름차순으로 정렬해야합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let peoplelist = [
  [
    ['firstName''goo'],
    ['age'42],
    ['gender''male'],
  ],
  [
    ['firstName''kim'],
    ['lastName''gangjun'],
    ['age'30],
    ['gender''female'],
  ],
  [
    ['lastName''lee'],
    ['age', 32],
    ['gender''male'],
  ],
];
cs

이처럼 나와야한다.

1
2
let output = outputName(peoplelist);
console.log(output); // --> ['kim gangjun', 'goo', 'lee'];
cs

약간의 노가다가 들어가지만 문제를 읽고 하나씩 해결해 가는 전략을 가졌습니다.

1)먼저 배열안에 있는 배열들을 객체로 만듭니다.

2)그 객체 안의 나이를 비교하여 합니다. (오름차순 공식입니다. 외우기)

3)map을 사용하여 이름이 있는지 여부에 따라 각각의 다른 리턴값을 가집니다.

4)result를 리턴합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function outputName(arr) {
  //먼저 안에 있는 배열을 객체로 만들어준다. 
  let newArr = []
  
  for(let i =0; i< arr.length; i++){
    newArr.push(Object.fromEntries(arr[i]))
  } 
 
  //객체에 있는 나이 비교+오름차순 만들기 공식
  newArr.sort(function (acc, cur) { 
    if(acc.age < cur.age ){
      return -1
    } else if( acc.age > cur.age) {
      return 1
    } else {
      return 0
    }
  });
 
  //이름과 성에 존재에 따라 나타내주기
  let result = newArr.map((key)=>{
    if(key.firstName !== undefined && key.lastName !==undefined){
      return `${key.firstName} ${key.lastName}`
    } else if (key.firstName !== undefined && key.lastName ===undefined ){
      return `${key.firstName}`
    } else if (key.firstName === undefined && key.lastName !==undefined){
      return `${key.lastName}`
    } else {
    }
  })
 
  return result;
}
 
cs

 

반응형

댓글