Как найти индекс элемента в массиве объектов?
Для поиска индекса элемента в массиве можно использовать методы indexOf (для первого вхождения) и lastIndexOf (для последнего вхождения). А как можно найти индекс в массиве объектов? Например индекс при первом вхождении нужного объекта? Например есть массив объектов:
let inputArr = [, , ];
Как получить индекс, где в свойстве name значение barry ? Если писать так:
inputArr.indexOf('barry');
то выведет -1 , а ожидаемое значение — 1 . Может циклом перебирать все значения? Может есть простые способы? orig post https://stackoverflow.com/q/8668174/6104996
Отслеживать
Алексей Шиманский
задан 19 дек 2017 в 16:00
Алексей Шиманский Алексей Шиманский
71.9k 12 12 золотых знаков 91 91 серебряный знак 180 180 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
-
Использовать findIndex, которая в качестве параметра принимает callback функцию, в которой можно указать условия. Её можно использовать для поиска непримитивных типов (в т.ч. объектов), а также где можно/нужно задать более сложные условия, нежели просто значение. Если элемент не найден — возвращается -1 .
let searchName = 'barry'; let index = inputArr.findIndex(el => el.name === searchName);
- Пробежаться с помощью map , выбрав в массив нужные значения по указанному свойству
- Уже к этому массиву и применять indexOf
let searchName = 'barry'; let index = inputArr.map(el => el.name).indexOf(searchName);
Недостаток: map создает целый массив, в котором лежат эдементы с нужным property . Поэтому если в массиве, например 1000 элементов, то может сказаться на производительности.
Плюс: в отличие от findIndex — map поддерживают больше браузеров, т.к. это более старый метод для работы с массивами
function arrayObjectIndexOf(myArray, property, searchTerm) < for(let i = 0, len = myArray.length; i < len; i++) < if (myArray[i][property] === searchTerm) return i; >return -1; > let index = arrayObjectIndexOf(inputArr, 'name', searchName); console.log(index);
var index = _.findIndex(inputArr, ) // 1
Можно задать несколько условий (как и при использовании findIndex ), например:
let inputArr = [, , , , ]; let cond = ; var index = _.findIndex(inputArr, cond) console.log(index); // 3
как найти индекс элемента массива js
Для поиска индекса элемента массива существует метод indexOf() . Этот метод возвращает первый индекс, по которому элемент может быть найден в массиве. Если элемент отсутствует в массиве, то возвращается -1.
const letters = ['a', 'b', 'b', 'c', 'd', 'e']; console.log(letters.indexOf('a')); // => 0 console.log(letters.indexOf('b')); // => 1 console.log(letters.indexOf('e')); // => 5 console.log(letters.indexOf('z')); // => -1
Как найти индекс массива java
Чтобы найти индекс искомого элемента в массиве можно в цикле перебрать все элементы и сравнить их с искомым. Если они равны, будет выведен индекс первого подходящего элемента.
// Число, которое будем искать int num = 3; // Переменная для хранения индекса, // найденного числа int index = -1; int[] arr = 1, 2, 3, 4, 5>; for (int i = 0; i arr.length; i++) // Если элемент и число равны, то // сохраняй индекс if (arr[i] == num) index = i; > > System.out.println(index); // => 2
Также можно воспользоваться пакетом org.apache.commons.lang , методом indexOf() из класса ArrayUtils для нахождения индекса элемента.
import org.apache.commons.lang3.ArrayUtils; public class Example public static void main(String[] args) int[] arr = 1, 2, 3, 4, 5>; // индекс числа 3 int index = ArrayUtils.indexOf(arr, 3); System.out.println(index); // => 2 > >
Определить индексы элементов массива, значение которых лежит в указанном пределе
В массиве определить индексы элементов, значение которых не меньше заданного минимума и не больше заданного максимума.
Это простая задача, если не требуется сохранять индексы элементов, а просто выводить их на экран. Ее можно усложнить, если задать условие сохранения в программе индексов найденных элементов и определение их общего количества. В таком случае потребуется ввести еще один массив.
- arr — исследуемый массив;
- id — массив индексов элементов массива arr , значение которых лежит в определенных пределах;
- min , max — нижняя и верхняя граница диапазона;
- m — количество найденных элементов.
Алгоритм решения задачи:
- генерируем массив случайных чисел и выводим его на экран;
- запрашиваем у пользователя нижнюю и верхнюю границы поиска;
- перебирая массив, если значение очередного элемента больше или равно минимуму и меньше или равно максимуму, то помещаем его индекс в массив id ;
- выводим общее количество найденных элементов и их индексы в массиве arr , сохраненные в массиве id .
Программа на языке Паскаль:
const N = 10; var arr: array[1..N] of integer; id: array[1..N] of byte; min, max: integer; i, m: byte; begin randomize; for i := 1 to N do begin arr[i] := random(100); write(arr[i], ' '); end; writeln; write('Min: '); readln(min); write('Max: '); readln(max); m := 0; for i := 1 to N do if (arr[i] >= min) and (arr[i]
Примеры выполнения кода:
40 18 84 37 72 74 88 85 42 14 Min: 21 Max: 49 Total: 3 Id: 1 4 9