selli
133
2021-01-14 08:49:31
3
180

자바스크립트 배열,객체 질문


제가 아래와 같은 형식으로 배열안에 객체들이 있는 형태로 만들려고합니다.

var ynType = [{
    "ID": "Y", // 실제 값
    "Name": "Y" // 보여질 값
}, {
    "ID": "N",
    "Name": "N"
}];


그리고, 아래처럼 for문을 돌면서 객체를 생성 시켜서 sbjCdTypeArr라는 배열에 push해주는데요.

왜 마지막에 push해준 값만 들어가나요?

response[i]를 콘솔에 찍으면 각기 다른 값이 있는데 왜 for문 돌면서 push해주면 마지막 요소만 여러번 들어갈까요???? ㅠㅠ



function getColumnsByTabType(tabType) {
    let sbjCdTypeArr = [];

    $.ajax({
        type: 'GET',
        url: '/admin/api/metaTables/sbjCdTypes',
        dataType: 'json',
        cache: false,
        success: function (response) {
            let sbjTypeObj = {};
            for (let i=0; i<response.length; i++) {
                sbjTypeObj['ID'] = response[i];
                sbjTypeObj['NAME'] = response[i];
             
                sbjCdTypeArr.push(sbjTypeObj);  // response[i]를 찍으면 잘 순서대로 찍히는데..ㅜ
            }
            console.log(sbjCdTypeArr); //
        },
        error: function (xhr, status, exception) {
            return false;
        }
    });
}



0
  • 답변 3

  • 퀘이사123
    552
    2021-01-14 09:04:38

    let sbjTypeObj 를 for문 안에서 선언하세요.


    for문 밖에서 선언했기 때문에 계속 같은 객체에 값을 대입하는게 됩니다.

  • yeori
    1k
    2021-01-14 09:34:54 작성 2021-01-14 09:35:16 수정됨

    sbjTypeObj 변수가 참조하는 인스턴스를 하나 만들어두고 for문 안에서 계속 덮어쓰고 있습니다.

    저렇게 하면 for문 반복횟수만큼 똑같은 인스턴스에 대한 참조들이 배열에 들어가겠죠.

    인스턴스를 새로 만들어서 배열에 넣는게 아니라, 하나의 인스턴스를 덮어쓰면서 참조만 배열에 넣는 코드입니다.

  • selli
    133
    2021-01-14 10:57:05

    감사합니다 선생님들

  • 로그인을 하시면 답변을 등록할 수 있습니다.