자바스크립트 2차원 배열 내 특정 값 추출하기!

조회수 4351회
let list = [
  [
    ['firstName', 'Joe'],
    ['age', 42],
    ['gender', 'male'],
  ],
  [
    ['firstName', 'Mary'],
    ['lastName', 'Jenkins'],
    ['age', 36],
    ['gender', 'female'],
  ],
  [
    ['lastName', 'Kim'],
    ['age', 40],
    ['gender', 'female'],
  ],
];

//  결과 console.log(output); // --> ['Mary Jenkins', 'Kim', 'Joe'];                 
// 1)나이 기준 오름차순정렬이고,이름과 성이 하나만 있는 경우는 하나만 표기합니다.나이는 전부다르다고 가정..
// 저는 하드코딩 방식으로 풀어서 그런지 list형식이 조금만 변해도 적용이 안 되드라구요.          

2 답변

  • 일단 오브젝트의 배열로 정리한 다음에 생각하시죠.

    let mapTheList = function (list) {
    
        // list 형식이야 어쨌든 전체를 순회하면서
        return list.map(function (item) {
    
            // 하나의 객체로 만들기로 한다.
            let obj = {};
    
            // 모두 길이가 2인 배열들로 이루어져 있다고 간주하고 전체를 돌면서 객체에 바로 넣고
            for (let i = 0; i < item.length; i++) {
                let attr = item[i];
                obj[attr[0]] = attr[1];
            }
    
            // 반환한다.
            return obj;
        });
    };
    
    // 객체들의 배열(array of objects)은 정렬, 필터링 등의 방법이 이미 인터넷에 많이 있습니다.
    console.log(mapTheList(list));
    
  • list
    .map(raw => raw.reduce((obj, [k, v]) => Object.assign(obj, {[k]: v}) , {}))
    .sort((a, b) => a.age - b.age)
    .map(({firstName, lastName}) => [firstName, lastName].filter(Boolean).join(' '))
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)