orion-muf / KHU-2017-2-Capstone2

0 stars 0 forks source link

deleteRectangle() seems not to be working properly #9

Closed muf closed 6 years ago

muf commented 6 years ago

not being deleted all at once..

muf commented 6 years ago

here is code..

function deleteRectangle(container, item){
    var idx = findRectangle(container, item)
    container[idx].setMap(null)
    container.splice(idx,1)
}

function deleteRectangles(container){
    for(idx in container){
        deleteRectangle(container, container[idx])
    }
    container = []

because target item is removed by code container.splice(idx,1) at function deleteRectangle(container, item), idx at for(idx in container) is being weird.. it skips some index values... ** container is global variable here..

now, we know why it works like .. then how to fix it?

muf commented 6 years ago

** interesting fact for this problem is... that similar code was NAVER's coding test for anwering what will be result like...

muf commented 6 years ago

테스트 코드

container = ["a","b","c","d"]

function findRectangle(container, item){
    for(idx in container){
        if(container[idx] == item){
            return idx
        }
    }
    return -1
}
function deleteRectangle(container, item){
    var idx = findRectangle(container, item)
    container.splice(idx,1)
}

function deleteRectangles(container){
    for(idx in container){
        deleteRectangle(container, container[idx])
    }

}

deleteRectangles(container)

테스트 결과 ["a","b","c","d"] => ["b","d"]

이제 이 문제를 해결해보자..

    for(idx in container){
        deleteRectangle(container, container[idx])
    }

여기서의 for 안의 container는 hard copy 해야한다.

Object.assign({}, obj); 함수를 사용하자..

수정된 코드

container = ["a","b","c","d"]

function findRectangle(container, item){
    for(idx in container){
        if(container[idx] == item){
            return idx
        }
    }
    return -1
}
function deleteRectangle(container, item){
    var idx = findRectangle(container, item)
    container.splice(idx,1)
}

function deleteRectangles(container){
    var copy_container = Object.assign({}, container)
    for(idx in copy_container){
        deleteRectangle(container, copy_container[idx])
    }

}

deleteRectangles(container)

결과 : []

프로젝트 코드도 수정해주자

muf commented 6 years ago

solved. https://github.com/muf/KHU-2017-2-Capstone2/commit/6313dda8d96e78c762353ebb3fcb3159dcf38a50