I was working on displaying the steps to sorting an array and trying to render out the different steps in react. When I call my bubble sort function, the array is already sorted after I click the button.
Creating my state variable:
const [arr, setArr] = useState(resetArr())
function resetArr() {
return new Array(10).fill().map(() => {
return ({
num: Math.floor(Math.random() * 100),
eval: false
})})
}
Bubble sort function
function bubbleSort() {
const history = [];
const sArr = arr.slice();
let len = sArr.length;
for (let i = len-1; i >= 0; i--) {
for (let j = 1; j<=i; j++) {
if (sArr[j-1].num > sArr[j].num) {
const temp = sArr[j-1].num;
sArr[j-1].num = sArr[j].num;
sArr[j].num = temp;
}
history.push(sArr);
}
}
console.log(history)
}
Button and return
return (
<div>
<div className="arr-container">
{arr.map((item, idx) =>
<div key={idx} className="arr-item">
{item.num}
</div>
)}
</div>
<div>
<button onClick={() => bubbleSort()}>Bubble</button>
</div>
</div>
)
Console log for history
0: Array(10)
0: {num: 0, eval: false}
1: {num: 3, eval: false}
2: {num: 9, eval: false}
3: {num: 18, eval: false}
4: {num: 33, eval: false}
5: {num: 41, eval: false}
6: {num: 53, eval: false}
7: {num: 65, eval: false}
8: {num: 94, eval: false}
9: {num: 99, eval: false}
1: Array(10)
0: {num: 0, eval: false}
1: {num: 3, eval: false}
2: {num: 9, eval: false}
3: {num: 18, eval: false}
4: {num: 33, eval: false}
5: {num: 41, eval: false}
6: {num: 53, eval: false}
7: {num: 65, eval: false}
8: {num: 94, eval: false}
9: {num: 99, eval: false}
Any help is appreciated, I am completely stuck on why it's working like this.