Array.prototype.find()
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015 .
Сводка
Метод find() возвращает значение первого найденного в массиве элемента, которое удовлетворяет условию переданному в callback функции. В противном случае возвращается undefined .
Также смотрите метод findIndex() , который возвращает индекс найденного в массиве элемента вместо его значения.
Если вам нужно найти позицию элемента или наличие элемента в массиве, используйте Array.prototype.indexOf() или Array.prototype.includes() соответственно.
Синтаксис
arr.find(callback[, thisArg])
Параметры
Функция, вызывающаяся для каждого значения в массиве, принимает три аргумента:
Текущий обрабатываемый элемент в массиве.
Индекс текущего обрабатываемого элемента в массиве.
Массив, по которому осуществляется проход.
Необязательный параметр. Значение, используемое в качестве this при выполнении функции callback .
Возвращаемое значение
Значение элемента из массива, если элемент прошёл проверку, иначе undefined .
Описание
Метод find вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве, до тех пор, пока она не вернёт true . Если такой элемент найден, метод find немедленно вернёт значение этого элемента. В противном случае, метод find вернёт undefined . До Firefox 34 функция callback не вызывалась для «дырок» в массивах (bug 1058394).
Функция callback вызывается с тремя аргументами: значением элемента, индексом элемента и массивом, по которому осуществляется проход.
Если в метод find был передан параметр thisArg , при вызове callback он будет использоваться в качестве значения this . В противном случае в качестве значения this будет использоваться значение undefined .
Метод find не изменяет массив, для которого он был вызван.
Диапазон элементов, обрабатываемых методом find , устанавливается до первого вызова функции callback . Элементы, добавленные в массив после начала выполнения метода find , не будут посещены функцией callback . Если существующие, непосещение элементы массива изменяются функцией callback , их значения, переданные в функцию, будут значениями на тот момент времени когда метод find посетит их; удалённые элементы все ещё будут посещены.
Примеры
Пример: поиск простого числа в массиве
Следующий пример находит в массиве положительных чисел элемент, являющийся простым числом (либо возвращает undefined , если в массиве нет простых чисел).
function isPrime(element, index, array) var start = 2; while (start Math.sqrt(element)) if (element % start++ 1) return false; > > return element > 1; > console.log([4, 6, 8, 12].find(isPrime)); // undefined, не найдено console.log([4, 5, 8, 12].find(isPrime)); // 5
Полифил
Этот метод был добавлен в спецификации ECMAScript 6 и пока может быть недоступен во всех реализациях JavaScript. Однако, вы можете использовать следующий сниппет в качестве полифила:
// https://tc39.github.io/ecma262/#sec-array.prototype.find if (!Array.prototype.find) < Object.defineProperty(Array.prototype, 'find', < value: function(predicate) < // 1. Let O be ? ToObject(this value). if (this == null) < throw new TypeError('"this" is null or not defined'); >var o = Object(this); // 2. Let len be ? ToLength(? Get(O, "length")). var len = o.length >>> 0; // 3. If IsCallable(predicate) is false, throw a TypeError exception. if (typeof predicate !== 'function') < throw new TypeError('predicate must be a function'); >// 4. If thisArg was supplied, let T be thisArg; else let T be undefined. var thisArg = arguments[1]; // 5. Let k be 0. var k = 0; // 6. Repeat, while k < len while (k < len) < // a. Let Pk be ! ToString(k). // b. Let kValue be ? Get(O, Pk). // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). // d. If testResult is true, return kValue. var kValue = o[k]; if (predicate.call(thisArg, kValue, k, o)) < return kValue; >// e. Increase k by 1. k++; > // 7. Return undefined. return undefined; >, configurable: true, writable: true >); >
Спецификации
Specification |
---|
ECMAScript Language Specification # sec-array.prototype.find |
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
- Array.prototype.findIndex() Экспериментальная возможность
- Array.prototype.every()
Длина массива JS
Длина массива (размер) — это количество элементов в массиве JavaScript.
Для определения длины есть стандартное свойство length . Его можно вызвать как у переменной, в которой содержится массив, так и у самого массива:
const arr = ['Samsung', 'Apple', 'LG', 'Huawei']; console.log(arr.length); // 4 console.log(['Samsung', 'Apple', 'LG', 'Huawei'].length); // 4
Значение пустой строки » , undefined , null также будут учтены:
const arr = ['Samsung', '', 'Apple', undefined, 'LG', null, 'Huawei']; console.log(arr.length); // 7
Часто данное свойство используется при переборе массива с помощью цикла for / while
const arr = ['Samsung', 'Apple', 'LG', 'Huawei']; for (let i = 0; i < arr.length; i++) < console.log(i, arr[i]); >let i = 0; while (i
Данный код вернет такой результат в консоли:
0 'Samsung' 1 'Apple' 2 'LG' 3 'Huawei'
Есть конечно сейчас более удобные и часто используемые метода для перебора массива, такие как forEach() .
Также данное свойство можно использовать для добавления элемента в массив.
Как задать размер массива?
Чтобы создать пустой массив с определенным количеством пустых элементов, мы можем использовать следующий код:
const arr = new Array(2); console.log(arr); // [empty, empty] console.log(arr.length); // 2
Ваши вопросы и комментарии:
Добавить комментарий Отменить ответ
Свежие записи
- MySQL IS NULL — проверка поля на NULL
- MySQL LIKE — поиск по паттерну
- Between MySQL — оператор для выборки по диапазону значений
- MySQL IN и NOT IN — несколько условий
- MySQL WHERE — синтаксис и примеры
Копирование материалов разрешено только с ссылкой на источник Web-Dev.guru
2024 © Все права защищены.
Поиск и подсчёт количества элементов в массиве js
Доброй ночи. Есть многомерный массив arr[[],[],[]] , состоящий из false и true , подскажите каким методом получить количество true в массиве?
Отслеживать
5,980 1 1 золотой знак 20 20 серебряных знаков 26 26 бронзовых знаков
задан 29 янв 2018 в 23:22
Artyom Sapsay Artyom Sapsay
97 1 1 серебряный знак 11 11 бронзовых знаков
циклами и рекурсией
– user176262
29 янв 2018 в 23:25
а можно по-точнее?
29 янв 2018 в 23:26
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Как и сказал Igor, циклы и рекурсия :
var ar = [ [true, false, true], [true, false, false], [true, false, true], [true, true, true], [false, false, true], [true, false], true, false, [true, false] ]; function calculate(array) < var res = < 'false': 0, 'true': 0 >; count(array); return res; function count(arr) < arr.forEach(e => < if (Array.isArray(e)) < count(e); >else < res['false'] += e ? 0 : 1; res['true'] += e ? 1 : 0; >>); >; >; console.log(calculate(ar));
Отслеживать
ответ дан 29 янв 2018 в 23:42
Rostyslav Kuzmovych Rostyslav Kuzmovych
5,980 1 1 золотой знак 20 20 серебряных знаков 26 26 бронзовых знаков
Ещё как вариант используя функцию .reduce :
const countTrue = arrayOrElement => Array.isArray(arrayOrElement) ? arrayOrElement.reduce((number, element) => number + countTrue(element), 0) : (arrayOrElement ? 1 : 0);
То же для подсчёта произвольных элементов:
const countValues = (arrayOrElement, valueToCount) => Array.isArray(arrayOrElement) ? arrayOrElement.reduce((number, element) => number + countValues(element, valueToCount), 0) : (arrayOrElement === valueToCount ? 1 : 0);
Сниппет для обоих вариантов:
let array = [ [true, false, true, false], [true, [false, [false, []]]], [[[[true]]]], [[[true], true], true], true, false, [[[[]]]] ]; const countTrue = arrayOrElement => Array.isArray(arrayOrElement) ? arrayOrElement.reduce((number, element) => number + countTrue(element), 0) : (arrayOrElement ? 1 : 0); console.log(countTrue(array)); const countValues = (arrayOrElement, valueToCount) => Array.isArray(arrayOrElement) ? arrayOrElement.reduce((number, element) => number + countValues(element, valueToCount), 0) : (arrayOrElement === valueToCount ? 1 : 0); console.log(countValues(array, false));
Array.length
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015 .
Сводка
Свойство length объекта, который является экземпляром типа Array , устанавливает или возвращает число элементов этого массива. Значение данного свойства 32-битное безнаковое целое число, которое всегда численно больше чем самый наибольший индекс в массиве.
var items = ["shoes", "shirts", "socks", "sweaters"]; items.length; // возвращает 4
Синтаксис
arr.length
Описание
Свойство length является целым числом с положительным знаком и значением, меньшим чем 2 в степени 32 (232).
var namelistA = new Array(4294967296); //2 в 32 степени = 4294967296 var namelistC = new Array(-100); //отрицательная величина console.log(namelistA.length); //RangeError: Invalid array length console.log(namelistC.length); //RangeError: Invalid array length var namelistB = []; namelistB.length = Math.pow(2, 32) - 1; //устанавливает длину массива меньше 2 в 32 степени console.log(namelistB.length); //4294967295
В любой момент вы можете установить свойство length для обрезки массива. Когда вы расширяете массив, изменяя его свойство length , реальное количество элементов в массиве увеличивается; например, если вы установите свойство length в 3, когда оно равно 2, массив будет из 3 элементов, где значение третьего элемента будет равно undefined .
var arr = [1, 2, 3]; printEntries(arr); arr.length = 5; // устанавливает длину массива 5. printEntries(arr); function printEntries(arr) var goNext = true; var entries = arr.entries(); while (goNext) var result = entries.next(); if (result.done !== true) console.log(result.value[1]); goNext = true; > else goNext = false; > console.log("=== printed == token punctuation">); > // 1 // 2 // 3 // === printed === // 1 // 2 // 3 // undefined // undefined // === printed ===
Таким образом, свойство length ничего не говорит о количестве определённых значений в массиве. Также смотрите раздел Взаимосвязь свойства length с числовыми свойствами.
Атрибуты свойства Array.length | |
---|---|
Записываемое | да |
Перечисляемое | нет |
Настраиваемое | нет |
Примеры
Пример: итерирование по массиву
В следующем примере массив numbers итерируется до значения свойства length , показывающего, сколько элементов содержит массив. Значение каждого элемента удваивается.
var numbers = [1, 2, 3, 4, 5]; for (var i = 0; i numbers.length; i++) numbers[i] *= 2; > // Массив numbers теперь равен [2, 4, 6, 8, 10];
Пример: сокращение массива
Следующий пример сокращает массив statesUS до длины в 50 элементов, если текущая длина массива больше 50.
if (statesUS.length > 50) statesUS.length = 50; >
Спецификации
Specification |
---|
ECMAScript Language Specification # sec-properties-of-array-instances-length |
Совместимость с браузерами
BCD tables only load in the browser