Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript에서 JSON 객체의 rssi 값을 2차원 배열로 변환하는 방법

다음과 같은 JSON 객체가 있다고 가정해 보겠습니다.

const obj = {
    "test1": [{
        "1": {
            "rssi": -25,
        }
    }, {
        "2": {
            "rssi": -25,
        }
    }],
    "test2": [{
        "15": {
            "rssi": -10,
        } }, {
        "19": {
            "rssi": -21,
        }
    }]
};

여기서 우리는 이런 구조의 객체를 입력받아, 모든 중첩 객체에 담긴 "rssi" 속성 값을 대응되는 중첩 배열, 즉 '배열의 배열' 형태로 변환하는 JavaScript 함수를 작성해야 합니다.

따라서 위 객체에 대한 출력 결과는 다음과 같아야 합니다.

const output = [[-25, -25], [-10, -21]];

구현 예시

const obj = {
    "test1": [{
        "1": {
            "rssi": -25,
        }
    }, {
        "2": {
            "rssi": -25,
        }
    }],
    "test2": [
        {
            "15":
                { "rssi": -10,
                }
        }, {
            "19": {
                "rssi": -21,
            }
        }]
};
const mapToValues = (object = {}) => {
    const res = [];
    for (let key in object) {
        let obj = object[key];
        let aux = [];
        for (let i = 0; i < obj.length; i++) {
            for (x in obj[i]) {
                aux.push(obj[i][x].rssi);
            }
        }
        res.push(aux);
    }
    return res;
};
console.log(mapToValues(obj));

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

[ [ -25, -25 ], [ -10, -21 ] ]

코드 동작 원리

mapToValues 함수는 for...in 루프를 사용해 최상위 객체의 각 키(test1, test2)를 순회합니다. 각 키의 값은 여러 개의 객체를 담고 있는 배열이므로, 내부 반복문으로 배열의 요소를 하나씩 확인한 뒤, 각 요소 객체의 키를 다시 순회하면서 rssi 값을 임시 배열(aux)에 차례대로 저장합니다. 완성된 임시 배열을 결과 배열(res)에 추가하면, 키별로 rssi 값이 그룹화된 2차원 배열을 얻을 수 있습니다.

참고로 for (x in obj[i])에서 변수 x를 선언하지 않으면 전역 변수가 되어 의도치 않은 동작을 일으킬 수 있으므로, 실무 코드에서는 for (let x in obj[i])처럼 반드시 선언해 주는 것이 좋습니다.