Home > Back-end >  Elements are getting omitted from Javascript array - problem
Elements are getting omitted from Javascript array - problem

Time:06-18

I want to sort an array from lowest number to highest. But when I execute the following code, some of my array elements get missed! I don't know why. I need help.`// Sort an array from lowest to highest

function findSmallest(numArr) {
  let smallestNumber = numArr[0]

  for (let i = 0; i < numArr.length; i  ) {
    if (numArr[i   1] < smallestNumber) {
      smallestNumber = numArr[i   1]
    }
  }
  return smallestNumber;
}

function getSortedArray(arr) {
  let sortedArray = []


  for (j = 0; j < arr.length; j  ) {
    let smallest = findSmallest(arr)
    let smallestNumbmerIndex;

    for (let i = 0; i < arr.length; i  ) {
      if (arr[i] === smallest) {
        smallestNumbmerIndex = i
      }
    }
    arr.splice(smallestNumbmerIndex, 1)
    sortedArray.push(smallest)
  }

  return sortedArray
}

let myArr = [23, 2, 12, 4]
console.log(getSortedArray(myArr)) // console output => [2, 4] , the rest elements get omitted

CodePudding user response:

since arr shrinks in each iteration, your for loop won't run 4 iterations, only 2 -

use while(arr.length){ instead of the for j loop

function findSmallest(numArr) {
  let smallestNumber = numArr[0]

  for (let i = 0; i < numArr.length; i  ) {
    if (numArr[i   1] < smallestNumber) {
      smallestNumber = numArr[i   1]
    }
  }
  return smallestNumber;
}

function getSortedArray(arr) {
  let sortedArray = []


  while(arr.length) {
    let smallest = findSmallest(arr)
    let smallestNumbmerIndex;

    for (let i = 0; i < arr.length; i  ) {
      if (arr[i] === smallest) {
        smallestNumbmerIndex = i
      }
    }
    arr.splice(smallestNumbmerIndex, 1)
    sortedArray.push(smallest)
  }

  return sortedArray
}

let myArr = [23, 2, 12, 4]
console.log(getSortedArray(myArr)) // console output => [2, 4] , the rest elements get omitted

CodePudding user response:

We can use a while loop, or we can store the length of array into a variable before the for loop, so that it will not change:

function findSmallest(numArr) {
  let smallestNumber = numArr[0]

  for (let i = 0; i < numArr.length; i  ) {
    if (numArr[i   1] < smallestNumber) {
      smallestNumber = numArr[i   1]
    }
  }
  return smallestNumber;
}

function getSortedArray(arr) {
  let sortedArray = []

  // we can store the array length into a variable
  let length = arr.length
  for (j = 0; j < length; j  ) {
    let smallest = findSmallest(arr)
    let smallestNumbmerIndex;

    for (let i = 0; i < arr.length; i  ) {
      if (arr[i] === smallest) {
        smallestNumbmerIndex = i
      }
    }
    arr.splice(smallestNumbmerIndex, 1)
    sortedArray.push(smallest)
  }

  return sortedArray
}

let myArr = [23, 2, 12, 4]
console.log(getSortedArray(myArr)) 

  • Related