Tell us what’s happening:
I have been trying this for a few days but no matter what i implement it always fails test #20. any advice would be very helpful.
Thanks in advance!
Your code so far
<!-- file: index.html -->
/* file: styles.css */
/* file: script.js */
const generateBtn = document.getElementById("generate-btn");
const sortBtn = document.getElementById("sort-btn");
const startingArray = document.getElementById("starting-array");
const arrayContainer = document.getElementById("array-container");
function generateElement() {
return Math.floor(Math.random() * 100) + 1;
}
function generateArray() {
const result = [];
for (let i = 0; i < 5; i++) {
result.push(generateElement());
}
return result;
}
function generateContainer() {
return document.createElement("div");
}
function fillArrContainer(htmlEl, arrayInput) {
htmlEl.innerHTML = "";
arrayInput.forEach((num) => {
const span = document.createElement("span");
span.textContent = num;
htmlEl.appendChild(span);
});
}
function isOrdered(a, b) {
return a <= b;
}
function swapElements(arrayInput, index) {
if (!isOrdered(arrayInput[index], arrayInput[index + 1])) {
const temp = arrayInput[index];
arrayInput[index] = arrayInput[index + 1];
arrayInput[index + 1] = temp;
return true;
}
return false;
}
function highlightCurrentEls(htmlEl, index) {
const children = htmlEl.children;
if (children[index] && children[index + 1]) {
children[index].style.border = "2px dashed red";
children[index + 1].style.border = "2px dashed red";
}
}
let arr = [];
generateBtn.addEventListener("click", () => {
arr = generateArray();
fillArrContainer(startingArray, arr);
arrayContainer.innerHTML = "";
arrayContainer.appendChild(startingArray);
});
sortBtn.addEventListener("click", () => {
let spans = startingArray.querySelectorAll("span");
if (spans.length === 0) {
arr = generateArray();
fillArrContainer(startingArray, arr);
spans = startingArray.querySelectorAll("span");
}
let workingArr = Array.from(spans).map(span => Number(span.textContent));
arrayContainer.innerHTML = "";
arrayContainer.appendChild(startingArray);
fillArrContainer(startingArray, workingArr);
let swapped;
let isFirstStep = true;
const n = workingArr.length;
do {
swapped = false;
for (let i = 0; i < n - 1; i++) {
let currentContainer;
if (isFirstStep) {
currentContainer = startingArray;
isFirstStep = false;
} else {
currentContainer = generateContainer();
fillArrContainer(currentContainer, workingArr);
arrayContainer.appendChild(currentContainer);
}
highlightCurrentEls(currentContainer, i);
if (!isOrdered(workingArr[i], workingArr[i + 1])) {
swapElements(workingArr, i);
swapped = true;
}
}
} while (swapped);
const finalDiv = generateContainer();
fillArrContainer(finalDiv, workingArr);
arrayContainer.appendChild(finalDiv);
});
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36
Challenge Information:
Build a Sorting Visualizer - Build a Sorting Visualizer