Как найти позицию числа в массиве

Есть массив с английским алфавитом:

let alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];

Хочу определить, какой у буквы f индекс в массиве. Есть ли функция с необходимым мне функционалом и можно ли это сделать не прогоняя весь массив через цикл?

задан 25 июн 2018 в 18:34

JamesJGoodwin's user avatar

JamesJGoodwinJamesJGoodwin

3,9766 золотых знаков35 серебряных знаков70 бронзовых знаков

Используйте indexOf

alphabet.indexOf('f')

Кстати, indexOf есть и у строк.

// строка abc...
let str_alpha = String.fromCharCode(...[...Array(26).keys()].map(i=>i+97));
console.log(str_alpha.indexOf('f'));
// массив 'a', 'b', 'c'...
let arr_alpha = str_alpha.split('');
console.log(arr_alpaha);

ответ дан 25 июн 2018 в 18:40

функция с … функционалом

зачет по русскому языку сдан.


var alphabetIndices = {
  ...
  f: 5,
  ...
};

var someLetter = 'f';
var index = alphabetIndices[someLetter]; // 5

Такое решение позволяет определять индекс буквы в алфавите, не заботясь о регистре:

var alphabetIndices = {
  ...
  f: 5, F: 5,
  ...
};

или использовать его для получения натурального номера буквы:

var alphabetOrdinals = {
  ...
  f: 6, F: 6,
  ...
};

ответ дан 25 июн 2018 в 18:36

12

еще вариант через indexOf():

let alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];

let res = alphabet.indexOf('v');
console.log(res)

ответ дан 25 июн 2018 в 18:44

Сергей Петрашко's user avatar

let alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];

console.log(alphabet.findIndex(item => item === 'e'));
console.log(alphabet.findIndex(item => item === 'x'));
console.log(alphabet.findIndex(item => item === 'a'));
console.log(alphabet.findIndex(item => item === 'd'));

ответ дан 25 июн 2018 в 18:50

RifmaMan's user avatar

RifmaManRifmaMan

1,7561 золотой знак7 серебряных знаков19 бронзовых знаков

Если без объявленного цикла, то можно так, но что под капотом во внутренних методах Array: split, join, toString, slice я не знаю, возможно в своих инструкциях и имеют циклы. Также можно создать и в последующем использовать, внутренний объект для записи искомых ключей.

var alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
/*
// v.1	
var someLetter = 'z';
var result = (function(_first, _second){return [--_first.split(",").length, -(_second.split(",").length)]}).apply(null, ("," + alphabet.join() + ",").split("," +someLetter + ","));
	console.log(alphabet[result[0]]);
	console.log(alphabet.slice(result[0]).shift());
	console.log(alphabet.slice(result[1]).shift());
*/

// v.2.0.1
Array.prototype["_indexSide_"] = function(_markerName, _flag){
	return (function(_first, _second){
		return !!_second && !!_flag? // v.2.0.1  если _second при разделении равен undefined то метод вернёт несуществующий индекс 
//		return !!_flag? // v.2
			-(_second.split(",").length) // если _flag true то вернёт отрицательный порядковый индекс маркера с конца массива 
			:
			--_first.split(",").length; // если _flag не передан или false, метод возвращает порядковый индекс маркера от начала массива
	}).apply(null, (","		
		+ this.toString() // v.2.0.1
//		+ this.join() // v.2
		+ ",").split("," +_markerName + ","))
}
	console.log(alphabet[alphabet._indexSide_("f")]);
	console.log(alphabet.slice(alphabet._indexSide_("a")).shift());
	console.log(alphabet.slice(alphabet._indexSide_("z", true)).shift());
	console.log(alphabet[alphabet._indexSide_("figvam")]);

ответ дан 25 июн 2018 в 20:36

L11VADIS's user avatar

L11VADISL11VADIS

6086 серебряных знаков11 бронзовых знаков

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Finding the position of a number in an array, which can be done using the find() function. The find() function is used to find the indices and values of the specified nonzero elements.

    Syntax

    find(X)

    Parameters: This function accepts a parameter.

    • X: This is the specified number whose position is going to be found in the array.

    Return Value: It returns the position of the given number in a specified array.

    Example 1  

    Matlab

    X = [2 4 4 5 6 4];

    Position_of_4 = find(X==4)

    Output:

    Example 2 

    Matlab

    X = [2 4 4 5 6 4]; 

    [Row, column] = find(X==4)

    Output:

    Last Updated :
    04 Jul, 2021

    Like Article

    Save Article

    В статье рассказывается о том, как использовать методы JavaScript indexOf и lastIndexOf для определения расположения элемента внутри массива.

    • Поиск элемента в массиве – знакомство с методом indexOf
    • Примеры применения метода indexOf()
    • Поиск элемента в массиве – знакомство с методом lastIndexOf()
    • Поиск элемента в массиве – примеры использования метода lastIndexOf()

    Чтобы определить расположение элемента в массиве, можно воспользоваться методом indexOf(). Он возвращает индекс первого вхождения элемента, либо -1, если он не найден.

    Ниже приведен синтаксис метода indexOf():

    Array.indexOf(searchElement, fromIndex)

    Метод indexOf() принимает два аргумента. searchElement -это элемент, который нужно найти в массиве. fromIndex – это индекс массива, с которого нужно начать поиск.

    Аргумент fromIndex в качестве значения может принимать как положительное, так и отрицательное целое число. Если значение аргумента fromIndex будет отрицательным, метод indexOf() начнет поиск по всему массиву плюс значение fromIndex. Если опустить аргумент fromIndex, то метод начнет поиск с элемента 0.

    Учтите, что метод JavaScript array indexOf() при сравнении searchElement с элементами в массиве, использует алгоритм строгого равенства, схожий с оператором “тройное равно(===).

    Предположим, что есть массив scores, в котором содержится шесть чисел:

    var scores = [10, 20, 30, 10, 40, 20];

    В следующем примере метод indexOf() используется для поиска элементов в массиве scores:

    console.log(scores.indexOf(10)); // 0
    console.log(scores.indexOf(30)); // 2
    console.log(scores.indexOf(50)); // -1
    console.log(scores.indexOf(20)); // 1

    Примеры применения метода indexOf()

    В примере используется fromIndex с отрицательными значениями:

    console.log(scores.indexOf(20,-1)); // 5 (fromIndex = 6+ (-1) = 5)
    console.log(scores.indexOf(20,-5)); // 1 (fromIndex = 6+ (-5) = 1)

    Предположим, что есть массив объектов. У каждого из них два свойства: name и age:

    var guests = [
        {name: 'John Doe', age: 30},
        {name: 'Lily Bush', age: 20},
        {name: 'William Gate', age: 25}
    ];

    Следующие выражение возвращает -1, даже если у первого элемента массива guests и searchElement будут одинаковые значения свойств name и age. Так как это два разных объекта:

    console.log(guests.indexOf({
        name: 'John Doe',
        age: 30
    })); // -1

    Иногда нужно находить индексы всех упоминаний элемента в массиве. В приведенном ниже примере для этого в функции find() используется метод массива JavaScript indexOf():

    function find(needle, haystack) {
        var results = [];
        var idx = haystack.indexOf(needle);
        while (idx != -1) {
            results.push(idx);
            idx = haystack.indexOf(needle, idx + 1);
        }
        return results;
    }

    В следующем примере функция find() используется для возврата массива с позициями числа 10 в массиве scores:

    console.log(find(10,scores)); // [0, 3]
    JavaScript array lastIndexOf method

    У массивов есть еще один метод – lastIndexOf(), который предлагает почти тот же функционал, что и indexOf().

    Синтаксис метода lastIndexOf():

    Array.lastIndexOf(searchElement[, fromIndex = Array.length – 1])

    Метод возвращает индекс последнего вхождения searchElement в массиве. Если элемент не найден, будет возвращено значение -1.

    В отличие от метода JavaScript indexOf(), lastIndexOf() сканирует массив в обратном направлении, начиная от значения fromIndex.

    Представленное ниже выражение возвращает последние индексы чисел 10 и 20 в массиве scores:

    console.log(scores.lastIndexOf(10));// 3
    console.log(scores.lastIndexOf(20));// 5

    Так как число 50 не находится в массиве, следующее выражение вернет -1.

    console.log(scores.lastIndexOf(50));// -1

    Мы научились использовать методы JavaScript indexOf() string и lastIndexOf() для поиска элементов в массиве.

    Как узнать где находится элемент массива?

    Есть массив, допустим c 9 элементами:[1,2,3,4,5,6,7,8,9] (элементов может быть любое кол-во).
    Я могу проверить есть ли цифра 5 в этом массиве или нет
    [1,2,3,4,5,6,7,8,9].indexOf(5)
    Но как узнать где эта 5 находится, то есть в центре массива или нет, если нет, то куда ближе, к концу или к началу, как далеко от конца массива и как далеко от начала.


    • Вопрос задан

      более трёх лет назад

    • 692 просмотра

    var index = [1,2,3,4,5,6,7,8,9].indexOf(5);

    Вот так 🙂 index будет содержать позицию начиная с 0, в данном случае index будет равен 4, а далее при помощи

    var length = [1,2,3,4,5,6,7,8,9].length;

    узнаете длину массива, и определяет в центре, ближе к началу, или ближе к концу эта 5 находиться.

    function midArr(arr, indexOf){
      var ind = arr.indexOf(indexOf);
      var qrtStep = arr.length/4;
      var qrt1 = qrtStep, 
          qrt2 = qrtStep*2, 
          qrt3 = qrtStep*3;
      if(ind == 0 || ind <= qrt1)
        return('"'+indexOf+'" находится в начале');
      else if(ind <= qrt2 || ind < qrt3)
        return('"'+indexOf+'" находится в середине');
      else
        return('"'+indexOf+'" находится в конце');
    }
    
    var array = [0,1,2,3,4,5,6,7,8,9,10,11];
    
    alert(midArr(array, 8));

    codepen.io/anon/pen/EKmxeR?editors=0011

    var arr = [1,2,3,4,5,6,7,8,9]; // исходный массив
    
    (function(num){ // объявили самовызывающую функцию
    	if((arr.length % num) > 0){
    		console.log('Центр массива находит на элементе ' + Math.round((arr.length / 2)) ); // находим цетр, если массив нечетный
    		var center = Math.round((arr.length / 2)); // запоминаем точку центра
    	}else{
    		console.log('Центр массива находит на элементе ' + (arr.length / 2) + ' и ' + (arr.length / 2 + 1)); // находим цетр, если массив четный
    		var center = (arr.length / 2);  // запоминаем точку центра ( левую))
    	}
    	console.log('Элемент отстаёт от начала на ' + arr.indexOf(num) + ' элемента. И на ' + (arr.length - 1 - arr.indexOf(num)) + ' от конца');
    	if(num === center){ // проверяем 'центральность'
    		console.log('Бинго! число в центре');
    	}else{
    		console.log('Элемент отстаёт от центра :');
    		(center > num)?console.log((center - num) + ' элементов слева'):console.log(-(center-num) + ' элементов справа'); // тернарный оператором определяем положение от центра
    	}
    })(5); // указываем число из массива, которое будем искать , в данном случаи - 5

    всё в консоле, новых переменных минимум. Для массива с четным числом данных, возможно, нужно будет подпилить что то … но мне лень %)

    Пригласить эксперта


    • Показать ещё
      Загружается…

    24 мая 2023, в 19:11

    15000 руб./за проект

    24 мая 2023, в 18:50

    3000 руб./за проект

    24 мая 2023, в 18:20

    50000 руб./за проект

    Минуточку внимания

    В этом посте будет обсуждаться, как найти индекс элемента в массиве примитивов или объектов в Java.

    Решение должно либо возвращать индекс первого вхождения требуемого элемента, либо -1, если его нет в массиве.

    1. Наивное решение — линейный поиск

    Наивное решение состоит в том, чтобы выполнить линейный поиск в заданном массиве, чтобы определить, присутствует ли целевой элемент в массиве.

    ⮚ Для примитивных массивов:

    // Метод поиска индекса элемента в примитивном массиве в Java

    public static int find(int[] a, int target)

    {

        for (int i = 0; i < a.length; i++)

        {

            if (a[i] == target) {

                return i;

            }

        }

        return 1;

    }

    ⮚ Для массивов объектов:

    // Общий метод для поиска индекса элемента в массиве объектов в Java

    public static<T> int find(T[] a, T target)

    {

        for (int i = 0; i < a.length; i++)

        {

            if (target.equals(a[i])) {

                return i;

            }

        }

        return 1;

    }

    2. Использование потока Java 8

    Мы можем использовать Java 8 Stream для поиска индекса элемента в массиве примитивов и объектов, как показано ниже:

    ⮚ Для примитивных массивов:

    // Метод поиска индекса элемента в примитивном массиве в Java

    public static int find(int[] a, int target)

    {

        return IntStream.range(0, a.length)

                        .filter(i -> target == a[i])

                        .findFirst()

                        .orElse(1);    // вернуть -1, если цель не найдена

    }

    ⮚ Для массивов объектов:

    // Общий метод для поиска индекса элемента в массиве объектов в Java

    public static<T> int find(T[] a, T target)

    {

        return IntStream.range(0, a.length)

                        .filter(i -> target.equals(a[i]))

                        .findFirst()

                        .orElse(1);    // вернуть -1, если цель не найдена

    }

    3. Преобразовать в список

    Идея состоит в том, чтобы преобразовать данный массив в список и использовать List.indexOf() метод, который возвращает индекс первого вхождения указанного элемента в этом списке.

    ⮚ Для примитивных массивов:

    Как преобразовать примитивный целочисленный массив в List<Integer>?

    // Метод поиска индекса элемента в примитивном массиве в Java

    public static int find(int[] a, int target)

    {

        return Arrays.stream(a)                     // IntStream

                    .boxed()                        // Stream<Integer>

                    .collect(Collectors.toList())   // List<Integer>

                    .indexOf(target);

    }

    ⮚ Для массивов объектов:

    Как преобразовать массив объектов в список?

    // Общий метод для поиска индекса элемента в массиве объектов в Java

    public static<T> int find(T[] a, T target) {

        return Arrays.asList(a).indexOf(target);

    }

    4. Бинарный поиск отсортированных массивов

    Для отсортированных массивов мы можем использовать Алгоритм бинарного поиска для поиска указанного массива для указанного значения.

    ⮚ Для примитивных массивов:

    // Метод поиска индекса элемента в примитивном массиве в Java

    public static int find(int[] a, int target)

    {

        int index = Arrays.binarySearch(a, target);

        return (index < 0) ? 1 : index;

    }

    ⮚ Для массивов объектов:

    // Общий метод для поиска индекса элемента в массиве объектов в Java

    public static<T> int find(T[] a, T target)

    {

        int index = Arrays.binarySearch(a, target);

        return (index < 0) ? 1 : index;

    }

    5. Использование библиотеки Guava

    ⮚ Для примитивных массивов:

    Библиотека Guava предоставляет несколько служебных классов, относящихся к примитивам, например Ints для инт, Longs надолго, Doubles на двоих, Floats для поплавка, Booleans для логического значения и так далее.

    Каждый класс полезности имеет indexOf() метод, который возвращает индекс первого появления цели в массиве. Мы также можем использовать lastIndexOf() чтобы вернуть индекс последнего появления цели в массиве.

    // Метод поиска индекса элемента в примитивном массиве в Java

    public static int find(int[] a, int target) {

        return Ints.indexOf(a, target);

    }

    ⮚ Для массивов объектов:

    Guava’s com.google.commons.collect.Iterables класс содержит статический служебный метод indexOf(Iterator, Predicate) который возвращает индекс первого элемента, удовлетворяющего предоставленному предикату, или -1, если итератор не имеет таких элементов.

    // Общий метод для поиска индекса элемента в массиве объектов в Java

    public static<T> int find(T[] a, T target)

    {

        int index = Iterators.indexOf(Iterators.forArray(a), new Predicate<T>()

        {

            public boolean apply(T input) {

                return input.equals(target);

            }

        });

        return index;

    }

     
    Мы также можем использовать com.google.common.base.Predicates класс, предоставляемый Guava, который содержит статические служебные методы, относящиеся к Predicate экземпляры.

    // Общий метод для поиска индекса элемента в массиве объектов в Java

    public static<T> int find(T[] a, T target)

    {

        int index = Iterators.indexOf(Iterators.forArray(a),

                                Predicates.in(Collections.singleton(target)));

        return index;

    }

     
    Для Java 8 и выше мы можем использовать лямбда-выражения:

    // Общий метод для поиска индекса элемента в массиве объектов в Java

    public static<T> int find(T[] a, T target) {

        return Iterators.indexOf(Iterators.forArray(a), x -> x.equals(target));

    }

    6. Использование Apache Commons Lang

    Apache Commons Ланг ArrayUtils класс содержит несколько статических служебных методов, которые работают с массивами примитивов или объектов. Он обеспечивает indexOf() метод, который находит индекс заданного значения в массиве.

    ⮚ Для примитивных массивов:

    // Метод поиска индекса элемента в примитивном массиве в Java

    public static int find(int[] a, int target) {

        return ArrayUtils.indexOf(a, target);

    }

    ⮚ Для массивов объектов:

    // Общий метод для поиска индекса элемента в массиве объектов в Java

    public static<T> int find(T[] a, T target) {

        return ArrayUtils.indexOf(a, target);

    }

    Вот и все, что касается поиска индекса элемента в массиве в Java.

    Добавить комментарий