Search code examples
javascriptsortingbubble-sort

javascript: array sort data become weird


previously i've do some technical test with hackerrank. For the simple testing i need to make two different array so i can check it the difference both of them. the first array will be unsorted, and the second will be sorted.

Here's my code:

function dataSort(thedata) {
    // Write your code here
    var unsorted = thedata
    var sorted = thedata
    console.log("not sorted", unsorted) // first log
    for(let i = 0; i < sorted.length; i++)
    {
        for(let j = i; j < sorted.length; j++)
        {
            if(sorted[i] > sorted[j])
            {
                let temp = sorted[i]
                sorted[i] = sorted[j]
                sorted[j] = temp
                
            }
        }
    }
    console.log("sorted",sorted) // second log
}
dataSort([1,3,4,2,1])

above code given the result below

not sorted [ 1, 3, 4, 2, 1 ]
sorted [ 1, 1, 2, 3, 4 ]

Okay, that's seems have no problem. but when i move the first console after the bubble sort near with second console, the data also sorted

function dataSort(thedata) {
    // Write your code here
    var unsorted = thedata
    var sorted = thedata
    for(let i = 0; i < sorted.length; i++)
    {
        for(let j = i; j < sorted.length; j++)
        {
            if(sorted[i] > sorted[j])
            {
                let temp = sorted[i]
                sorted[i] = sorted[j]
                sorted[j] = temp
                
            }
        }
    }
    console.log("not sorted", unsorted) // first log
    console.log("sorted",sorted) // second log
}
dataSort([1,3,4,2,1])

result

not sorted [ 1, 1, 2, 3, 4 ]
sorted [ 1, 1, 2, 3, 4 ]

Can you tell me what happened?


Solution

  • GrafiCode gave you the correct explanation about why this happens.

    Here is a possible solution:

    function dataSort(thedata) {
        // Write your code here
        var unsorted = new Array(...thedata)
        var sorted = new Array(...thedata)
        for(let i = 0; i < sorted.length; i++)
        {
            for(let j = i; j < sorted.length; j++)
            {
                if(sorted[i] > sorted[j])
                {
                    let temp = sorted[i]
                    sorted[i] = sorted[j]
                    sorted[j] = temp
                    
                }
            }
        }
        console.log("not sorted", unsorted) // first log
        console.log("sorted",sorted) // second log
    }
    dataSort([1,3,4,2,1])