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
  1. Берём каждый элемент массива по порядку (a[i])
  2. Если длина массива (length) на текущей итерации больше, чем max, то заносим это значение в max
  3. Всё

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() Возвращает новый массив, состоящий из данного массива, соединённого с другим массивом и/или значением (списком массивов/значений).
join()
Объединяет все элементы массива в строку как toString(), и дополнительно можно указать свой разделитель.
slice() Извлекает диапазон значений и возвращает его в виде нового массива.
toString() Возвращает строковое представление массива и его элементов. Переопределяет метод Object.prototype.toString().
toLocaleString() Возвращает локализованное строковое представление массива и его элементов. Переопределяет метод Object.prototype.toLocaleString().
indexOf() Возвращает первый (наименьший) индекс элемента внутри массива, равный указанному значению; или -1, если значение не найдено.
lastIndexOf() Возвращает последний (наибольший) индекс элемента внутри массива, равный указанному значению; или -1, если значение не найдено.

Методы обхода
Команда Описание
forEach() Вызывает функцию для каждого элемента в массиве.
every()
Возвращает true, если каждый элемент в массиве удовлетворяет условию проверяющей функции.
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() :

 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_ :

9019 2 // Новый объект пусть животное = { четыре ноги: правда, } константная собака = { имя: «Ная», возраст: 2, черный цвет», Порода: «Ротвейлер микс», } // Связать объект собаки с объектом животного собака.__прото__ = животное var count = Object.keys(dog).length console.log(количество) // Результат: 4

Почему результат равен 4, когда общее количество свойств собак и животных равно 5, а мы просто соединили их вместе и посчитали?

Потому что мы используем Object. keys() , который считает только свои собственные (перечисляемые) свойства, а не связанные свойства. Поэтому свойство fourLegs из объекта animal не учитывается в приведенном выше примере.

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

 const animal = {
  четыре ноги: правда,
}
константная собака = {
  имя: "Ная",
  возраст: 2,
  черный цвет",
  Порода: "Ротвейлер микс",
}
// Связать объект собаки с объектом животного
собака.__прото__ = животное
пусть счет = 0
for (свойства в собаке) {
  количество = количество + 1
}
console.log(количество)
// Результат: 5 

Теперь мы получаем все 5 свойств, потому что в отличие от Object.keys() , когда мы используем цикл for , мы подсчитываем через каждые свойств объекта, включая связаны свойств объекта.

Как видите, имеет значение, какой подход вы используете.

Вкратце:

  • Существует два способа подсчета количества свойств в объекте.