Рубрики
Без рубрики

Как найти индекс, где число принадлежит в массиве в JavaScript

Сортировка – очень важная концепция при написании алгоритмов. Есть все виды сортов: пузырь-сортировка, сортировка оболочки, сортировка блока, сортировка расчески, сортировка коктейля, сортировка GNOME – я не делаю их! Эта проблема дает нам проблеск в замечательный мир рода. Мы должны сортировать ан

Автор оригинала: Dylan Attal.

Сортировка – очень важная концепция при написании алгоритмов. Есть все виды сортов: пузырь-сортировка, сортировка оболочки, сортировка блока, сортировка расческа, сортировка коктейля, сортировка GNOME – Я не делаю это ?| Действительно

Эта проблема дает нам проблеск в замечательный мир рода. Мы должны сортировать массив номеров, по крайней мере, для самых больших и выясните, где в этом массиве будет принадлежать данное число.

Алгоритм Инструкции

function getIndexToIns(arr, num) {
  return num;
}

getIndexToIns([40, 60], 50);

Предоставил тестовые случаи

  • GetIndextoins ([10, 20, 30, 40, 50], 35) должен вернуться 3 Отказ
  • GetIndextoins ([10, 20, 30, 40, 50], 35) должен вернуть номер.
  • GetIndextoins ([10, 20, 30, 40, 50], 30) должен вернуться 2 Отказ
  • GetIndextoins ([10, 20, 30, 40, 50], 30) должен вернуть номер.
  • GetIndextoins ([40, 60], 50) должен вернуться 1 Отказ
  • GetIndextoins ([40, 60], 50) должен вернуть номер.
  • GetIndextoins ([3, 10, 5], 3) должен вернуться 0 Отказ
  • GetIndextoins ([3, 10, 5], 3) должен вернуть номер.
  • GetIndextoins ([5, 3, 20, 3], 5) должен вернуться 2 Отказ
  • GetIndextoins ([5, 3, 20, 3], 5) должен вернуть номер.
  • GetIndextoins ([2, 20, 10], 19) должен вернуться 2 Отказ
  • GetIndextoins ([2, 20, 10], 19) должен вернуть номер.
  • GetIndextoins ([2, 5, 10], 15) должен вернуться 3 Отказ
  • GetIndextoins ([2, 5, 10], 15) должен вернуть номер.
  • GetIndextoins ([], 1) должен вернуться 0 Отказ
  • GetIndextoins ([], 1) должен вернуть номер.

Решение № 1: .sort (), .indexof ( )

Педак

Понимание проблемы : У нас есть два входа, массив и номер. Наша цель – вернуть индекс нашего номера ввода после того, как он отсортирован в входной массив.

Примеры/тестовые случаи : Хорошие люди на FreeCodeCamp не говорят нам, как следует отсортировать входной массив, но предоставленные тестовые случаи позволяют понять, что входной массив должен быть отсортирован от наименьшего для всего наилучшего.

Обратите внимание, что существует краевой случай на последних двух, при условии, что тестовые случаи, когда входной массив является пустым массивом.

Структура данных : Поскольку мы в конечном итоге возвращаем индекс, придерживаясь массивов, собирается работать для нас.

Мы собираемся использовать нефте-метод имени .индекс () :

.индекс () Возвращает первый индекс, в который элемент присутствует в массиве или -1 Если элемент вообще нет. Например:

let food = ['pizza', 'ice cream', 'chips', 'hot dog', 'cake']
food.indexOf('chips')// returns 2food.indexOf('spaghetti')// returns -1

Мы также собираемся использовать .concat () здесь вместо .толкать () . Почему? Потому что, когда вы добавляете элемент на массив, используя .толкать () он возвращает длину нового массива. Когда вы добавляете элемент на массив, используя .concat () Это возвращает новый массив сама. Например:

let array = [4, 10, 20, 37, 45]
array.push(98)// returns 6array.concat(98)// returns [4, 10, 20, 37, 45, 98]

Алгоритм :

  1. Вставить Номер в массив Отказ
  2. Сортировать arr от всего наилучшего.
  3. Вернуть индекс Num Отказ

Код : См. ниже!

function getIndexToIns(arr, num) {
  // Insert num into arr, creating a new array.
     let newArray = arr.concat(num)
  //             [40, 60].concat(50)
  //             [40, 60, 50]

  // Sort the new array from least to greatest.
     newArray.sort((a, b) => a - b)
  // [40, 60, 50].sort((a, b) => a - b)
  // [40, 50, 60]

  // Return the index of num which is now
  // in the correct place in the new array.
     return newArray.indexOf(num);
  // return [40, 50, 60].indexOf(50)
  // 1
}

getIndexToIns([40, 60], 50);

Без местных переменных и комментариев:

function getIndexToIns(arr, num) {
  return arr.concat(num).sort((a, b) => a - b).indexOf(num);
}

getIndexToIns([40, 60], 50);

Решение № 2: .sort (), .findindex ()

Педак

Понимание проблемы : У нас есть два входа, массив и номер. Наша цель – вернуть индекс нашего номера ввода после того, как он отсортирован в входной массив.

Примеры/тестовые случаи : Хорошие люди на FreeCodeCamp не говорят нам, как следует отсортировать входной массив, но предоставленные тестовые случаи позволяют понять, что входной массив должен быть отсортирован от наименьшего для всего наилучшего.

Есть два краевых случая для учета с этим решением:

  1. Если входной массив пуст, нам нужно вернуть 0 потому что опускать будет Только Элемент в этом массиве, следовательно, при индексе 0 Отказ
  2. Если Num будет принадлежать в самом конце arr отсортировано от наименьшего для наибольшего, тогда нам нужно вернуть длину приостановить .

Структура данных : Поскольку мы в конечном итоге возвращаем индекс, придерживаясь массивов, собирается работать для нас.

Давайте оформить заказ .findindex. () Чтобы увидеть, как он поможет решить эту проблему:

.findindex () Возвращает индекс первого элемента в массиве, который удовлетворяет предоставленной функции тестирования. В противном случае он возвращает -1, указывая, что ни один элемент не передал тест. Например:

let numbers = [3, 17, 94, 15, 20]
numbers.findIndex((currentNum) => currentNum % 2 == 0)
// returns 2
numbers.findIndex((currentNum) => currentNum > 100)
// returns -1

Это полезно для нас, потому что мы можем использовать .findindex. () Для сравнения нашего ввода опускать каждому количеству на нашем входе arr и выяснить, где он будет соответствовать в порядке, по крайней мере, для самых больших.

Алгоритм :

  1. Если arr пустой массив, возврат 0 Отказ
  2. Если Num принадлежит в конце отсортированного массива, вернуть длину arr Отказ
  3. В противном случае верните индекс Num было бы, если приостановить был отсортирован от наилучшего в наибольшей степени.

Код : См. ниже!

function getIndexToIns(arr, num) {
  // Sort arr from least to greatest.
    let sortedArray = arr.sort((a, b) => a - b)
  //                  [40, 60].sort((a, b) => a - b)
  //                  [40, 60]

  // Compare num to each number in sortedArray
  // and find the index where num is less than or equal to 
  // a number in sortedArray.
    let index = sortedArray.findIndex((currentNum) => num <= currentNum)
  //            [40, 60].findIndex(40 => 50 <= 40) --> falsy
  //            [40, 60].findIndex(60 => 50 <= 60) --> truthy
  //            returns 1 because num would fit like so [40, 50, 60]

  // Return the correct index of num.
  // If num belongs at the end of sortedArray or if arr is empty 
  // return the length of arr.
    return index === -1 ? arr.length : index
}

getIndexToIns([40, 60], 50);

Без местных переменных и комментариев:

function getIndexToIns(arr, num) {
  let index = arr.sort((a, b) => a - b).findIndex((currentNum) => num <= currentNum)
  return index === -1 ? arr.length : index
}

getIndexToIns([40, 60], 50);

Если у вас есть другие решения и/или предложения, пожалуйста, поделитесь в комментариях!

Эта статья является частью сценариев алгоритма серии FreeCodecamp.

Эта статья ссылается на FreeCodeCamp Основные алгоритмы сценариев: где я принадлежу.

Вы можете следовать за мной на Средний , LinkedIn и Github Действительно