javascript — Найти самого большого элемента в массиве без метода .map
Задать вопрос
Вопрос задан
Изменён 1 год 5 месяцев назад
Просмотрен 147 раз
При нажатии «b» выполняем функцию «f». Функция должна вывести в «out» длину самого большого вложенного массива в «a». То есть ожидаем 6. Не знаю как решить. Нужно решить задачу без всяких методов массива типа .map. Кажется можно решить задачу с циклами и условиями if. Но не знаю как.
let a = [ [], [1, 0], [1, 0, 0, 0], [3, 4, 5, 6, 7, 8], [1, 2] ]; function f() { let max = 0; for (let i = 0; i < a.length; i++) { // Дальше не знаю что писать } document. querySelector('.out').innerHTML = max; } document.querySelector('.b').onclick = f;
- javascript
- Берём каждый элемент массива по порядку (
a[i]
) - Если длина массива (length) на текущей итерации больше, чем
max
, то заносим это значение вmax
- Всё
3
Сам нашел решение:
for (let i = 0; i < a15.length; i++) { let maxIndex = a15[i].length - 1; // Длина каждого элемента в массиве if (maxIndex > max) { // Пока длина элемента массива больше чем max max = maxIndex; // max присваиваем Длину элемента массива } }
8
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
JavaScript МАССИВ (свойства и методы)
JavaScript МАССИВ (свойства и методы)В JavaScript Массив (Array) является глобальным объектом, предназначен для создании массивов, представляющий собой спископодобные объекты высокого уровня.
Команда | Описание |
---|---|
.length | Отражает количество элементов в массиве. |
.prototype | Позволяет добавлять свойства ко всем объектам массива. |
.constructor | Определяет функцию, создающую прототип объекта. |
Команда | Описание |
---|---|
push() | Добавляет один или более элементов в конец массива и возвращает новую длину массива. |
pop() | Удаляет последний элемент из массива и возвращает его. |
unshift() | Добавляет один или более элементов в начало массива и возвращает новую длину массива. |
shift() | Удаляет первый элемент из массива и возвращает его. |
splice() | Добавляет и/или удаляет элементы из массива. |
reverse() | Переворачивает порядок элементов в массиве — первый элемент становится последним, а последний — первым. |
sort() | Сортирует элементы массива на месте и возвращает отсортированный массив. Для сортировки числовых значений есть дополнительная функция. Сортировка по убыванию sort(function(a, b){return b-a}), или по возрастанию {return a-b}. Те же самые действия можем делать при помощи знака (). |
Эти методы не изменяют массив, а просто возвращают его в ином представлении. | |
Команда | Описание |
---|---|
concat() | Возвращает новый массив, состоящий из данного массива, соединённого с другим массивом и/или значением (списком массивов/значений). |
Объединяет все элементы массива в строку как toString(), и дополнительно можно указать свой разделитель. | |
slice() | Извлекает диапазон значений и возвращает его в виде нового массива. |
toString() | Возвращает строковое представление массива и его элементов. Переопределяет метод Object.prototype.toString(). |
toLocaleString() | Возвращает локализованное строковое представление массива и его элементов. Переопределяет метод Object.prototype.toLocaleString(). |
indexOf() | Возвращает первый (наименьший) индекс элемента внутри массива, равный указанному значению; или -1, если значение не найдено. |
lastIndexOf() | Возвращает последний (наибольший) индекс элемента внутри массива, равный указанному значению; или -1, если значение не найдено. |
Команда | Описание |
---|---|
forEach() | Вызывает функцию для каждого элемента в массиве. |
every() | |
some() | Возвращает true, если хотя бы один элемент в массиве удовлетворяет условию проверяющей функции. |
filter() | Создаёт новый массив со всеми элементами этого массива, для которых функция фильтрации возвращает true. |
map() | Создаёт новый массив с результатами вызова указанной функции на каждом элементе данного массива. |
reduce() | Применяет функцию к аккумулятору и каждому значению массива (слева-направо), сводя его к одному значению. |
reduceRight() | Применяет функцию к аккумулятору и каждому значению массива (справа-налево), сводя его к одному значению. |
3 предыдущих статей
Комбинированные операции JavaScript
(1488)
Зарезервированные слова в JavaScript
(2237)
Формы HTML5: Java Script и проверка с Constraint Validation API
(5465)
Как получить длину объекта
В отличие от массивов, всегда было сложно получить длину объекта. Ну не больше!
Object.keys возвращает массив всех перечисляемых ключей свойств объекта. И после этого можно просто назвать длиной
, и вуаля! У вас есть длина объекта 🎉
- Почему мы не можем называть длину объекта
- Что такое Enumerables
- Назначение свойства
- Определение свойства
- Enumerable по умолчанию true
- Enumerable Summary
- Object.keys vs Object.getOwnPropertyNames
- Длина объекта с символами
- Ресурсы
Почему мы не можем вызвать
length
на Объекте Вам может быть интересно, почему мы не можем просто вызовите length
непосредственно на нашем объекте. Давайте посмотрим, что произойдет, когда мы это сделаем:
Вы не можете этого сделать, потому что объект
не имеет свойства length
. Только строка 9Массивы 0004 и
имеют свойство длины
.
Что такое Enumerables
Хорошо, давайте затронем другую тему. Я упомянул в начале, что Object.keys
возвращает массив из перечислимых ключей свойств. Итак, давайте разберемся, откуда берется этот перечисляемый атрибут
.
Назначение свойства
Обычно, когда мы хотим добавить свойство к объекту, мы можем просто использовать запись через точку:
Определение свойства
В качестве альтернативы мы также можем использовать Object.defineProperty
. Он принимает 3 параметра. И именно в дескрипторе свойства мы можем установить наш перечисляемый атрибут.
Хорошо, давайте определим свойство с помощью этого метода:
Хммм... странно. Почему наше свойство не появилось 🤔 Ну, это потому, что когда мы определяем свойство таким образом, атрибут enumerable
по умолчанию имеет значение false
. Поэтому, если мы хотим, чтобы он отображался, нам нужно установить правда
ему.
Enumerable по умолчанию имеет значение true
Давайте вернемся к нашему примеру свойства объекта, которое мы установили с помощью записи через точку. Почему он появился автоматически? Ну, это потому, что, когда мы назначаем свойство таким образом, перечисляемый атрибут
автоматически устанавливается равным true
.
Enumerable Summary
Большинство из нас редко касаются перечислимого атрибута при определении нашего свойства. Это просто способ контролировать, будет ли конкретное свойство, которое мы создали, отображаться или оставаться скрытым, когда мы перебираем объект, используя Объект.ключи
.
Если вы хотите узнать больше о перечислимости, я рекомендую прочитать эту статью, Перечислимость в ECMAScript 6.
Таким образом, перечисляемый атрибут используется для скрытия свойств, которые не должны повторяться. Это было причиной введения перечисления в Ecmascript 1.
Dr. Axel Rauschmayer, 2.
Object.Keys против объекта.0004 , давайте рассмотрим другой метод, который вы можете увидеть в качестве опции для получения длины,
Object. getOwnPropertyNames
. Как видите, Object.getOwnPropertyNames
вернет ВСЕ ключи свойств, тогда как Object.keys
вернет только перечисляемые ключи свойств. Как я упоминал ранее, перечисляемые атрибуты могут быть скрыты по какой-то причине, поэтому вы можете не захотеть получить к ним доступ. Таким образом, Object.getOwnPropertyName
может оказаться не тем методом, который вы хотите использовать для получения длины объекта.
Длина объекта с символами
До того, как вы установите по умолчанию Object.keys
, чтобы получить длину объекта. Хочу отметить еще одно соображение. В ECMAScript 6, ES6, был введен новый примитивный тип данных, названный символом
. И вы можете использовать символ
в качестве имени свойства объекта.
Но проблема в том, что у вас есть символ
в качестве имени свойства. Object.keys
и Object.getOwnPropertyNames
не будут работать.
Таким образом, решение состоит в использовании Object.getOwnPropertySymbols
Теперь, объединив два метода, вы получите нужную длину.
Ресурсы
- Веб-документы MDN: Object.keys
- Веб-документы MDN: Object.getOwnPropertyNames
- Веб-документы MDN: Object.getOwnPropertySymbols
- M DN Web Docs: Object
- 2ality: перечислимость в ES6
- 2ality: свойство Определение и назначение
- Переполнение стека: когда использовать Object.defineProperty
- Переполнение стека: как использовать JavaScript Object.defineProperty
- Переполнение стека: Object.getOwnPropertyNames vs Object.keys
- Переполнение стека: длина объекта JavaScript
Как подсчитать количество свойств в объекте JavaScript – Techstacker
Узнайте, как подсчитать количество свойств в объекте JavaScript двумя разными способами.
Чтобы подсчитать количество свойств объекта JavaScript, вы можете использовать:
- a
для
петли - или метод
Object. keys()
.
Давайте исследуем их обоих!
Подсчет свойств объекта с помощью цикла for
Вот объект JavaScript с именем dog
:
const dog = { имя: "Ная", возраст: 2, черный цвет", Порода: "Ротвейлер микс", }
Чтобы подсчитать количество свойств объекта в dog
, давайте сначала объявим переменную с именем count
и присвоим ей начальное значение 0
:
let count = 0
Теперь нам нужно перебрать объект dog
и для каждого свойства, с которым мы сталкиваемся, мы добавляем единицу (+ 1) к переменной count :
for (let properties у собаки) { количество = количество + 1 }
Теперь попробуйте вывести результат с помощью
:
console.log(count) // Результат: 4
Если вы правильно написали код, вы должны получить 4
.
Подсчет свойств объекта с помощью Object.
keys() Вы также можете использовать метод JavaScript Object.keys()
для подсчета всех перечисляемых свойств (подробнее об этом чуть позже) объекта.
Давайте повторно используем объект dog
из предыдущего, но теперь мы передаем объект dog
в Object.keys()
и вычисляем его длину с помощью свойства length
:
const dog = { имя: "Ная", возраст: 2, черный цвет", Порода: "Ротвейлер микс", } пусть count = Object.keys(dog).length console.log(количество) // Результат: 4
Как видите, результат тот же. Или это?
Да и нет. Это зависит от контекста.
for и Object.keys()
Разница между использованием цикла for
и Object.keys()
заключается в следующем:
- Цикл
for
подсчитывает оба свойства объекта (здесь 03 dog ) и любые свойства, которые могут быть связаны с объектом вне его. - По умолчанию метод
Object. keys()
подсчитывает (перечисляет) только перечисляемые (собственные) свойства объекта, а не связанные свойства.
Перечисление — это другое слово для счета .
Что я имею в виду под «связанными свойствами»?
Возьмем тот же пример Object.keys()
из предыдущего, но на этот раз мы свяжем объект собака
с объектом с именем животное
, используя свойство _proto_
:
Почему результат равен 4, когда общее количество свойств собак
и животных
равно 5, а мы просто соединили их вместе и посчитали?
Потому что мы используем Object. keys()
, который считает только свои собственные (перечисляемые) свойства, а не связанные свойства. Поэтому свойство fourLegs
из объекта animal
не учитывается в приведенном выше примере.
Теперь давайте попробуем другой пример, но на этот раз мы используем для цикла
для подсчета свойств:
const animal = { четыре ноги: правда, } константная собака = { имя: "Ная", возраст: 2, черный цвет", Порода: "Ротвейлер микс", } // Связать объект собаки с объектом животного собака.__прото__ = животное пусть счет = 0 for (свойства в собаке) { количество = количество + 1 } console.log(количество) // Результат: 5
Теперь мы получаем все 5 свойств, потому что в отличие от Object.keys()
, когда мы используем цикл for
, мы подсчитываем через каждые свойств объекта, включая связаны свойств объекта.
Как видите, имеет значение, какой подход вы используете.
Вкратце:
- Существует два способа подсчета количества свойств в объекте.