Если вы что-нибудь знаете о JavaScript, то вы знаете, что две наиболее часто используемые структуры данных в JavaScript — это массивы и объекты. Хотя и массивы, и объекты могут хранить наборы данных, у них есть некоторые ключевые различия с точки зрения их методов и сложности времени/пространства.

В этой статье мы более подробно рассмотрим методы, доступные для массивов и объектов JavaScript, и сравним временную и пространственную сложность каждого метода с точки зрения большой нотации O.

Массивы

Массивы JavaScript — это упорядоченные наборы данных, которые могут хранить значения любого типа, включая даже другие массивы или объекты! Массивы имеют ряд полезных методов для ввода и доступа:

Толкать

Метод push() позволяет добавить элемент в конец массива. Этот метод имеет временную сложность O(1), потому что для добавления элемента требуется одинаковое количество времени, независимо от размера массива. Пространственная сложность push() также равна O(1), потому что она добавляет только один элемент в массив.

Поп

Метод pop() удаляет последний элемент из массива и возвращает этот элемент. Этот метод также имеет временную сложность O(1), потому что он работает только с последним элементом массива. Пространственная сложность pop() также равна O(1), потому что она удаляет только один элемент из массива.

Сдвиг

Метод shift() удаляет первый элемент из массива и возвращает этот элемент. Этот метод имеет временную сложность O(n), потому что он должен сдвинуть все остальные элементы в массиве на один индекс влево. Пространственная сложность shift() также равна O(1), потому что она удаляет только один элемент из массива.

Unshift

Метод unshift() добавляет элемент в начало массива. Этот метод также имеет временную сложность O(n), потому что он должен сдвинуть все остальные элементы в массиве на один индекс вправо. Пространственная сложность unshift() также равна O(n), потому что она должна создать новый массив с одним дополнительным элементом.

Сращивание

Метод splice() позволяет добавлять или удалять элементы из массива. Этот метод имеет временную сложность O(n), потому что он должен сдвигать все остальные элементы в массиве, чтобы разместить добавленные или удаленные элементы. Пространственная сложность splice() также равна O(n), потому что она должна создать новый массив с добавленными или удаленными элементами.

Конкат

Метод concat() позволяет объединить два или более массивов вместе. Этот метод имеет временную сложность O(n), потому что он должен создать новый массив со всеми элементами из обоих массивов. Пространственная сложность concat() также равна O(n), потому что он должен создать новый массив со всеми элементами из обоих массивов.

Кусочек

Метод slice() позволяет извлечь часть массива и возвращает новый массив. Этот метод имеет временную сложность O(n), потому что он должен создать новый массив с извлеченными элементами. Пространственная сложность slice() также равна O(n), потому что она должна создать новый массив с извлеченными элементами.

Объекты

Объекты JavaScript представляют собой наборы пар ключ/значение. В отличие от массивов, объекты ничего не говорят о порядке. Скажи мне ключ и его значение, и все готово. У них есть ряд полезных методов для ввода и доступа:

Чтение или запись значения

Вы можете использовать синтаксис myObject[name] для чтения значения и myObject[age] = 13, например, для записи значения этого ключа.
Обе эти операции имеют временную сложность O(1), поскольку, как я уже говорил ранее, объекты не меня не волнует порядок или количество элементов в них.

Object.keys

Метод Object.keys() возвращает массив ключей объекта. Этот метод имеет временную сложность O(n), потому что он должен перебирать все ключи в объекте. Пространственная сложность Object.keys() также равна O(n), потому что она должна создать новый массив со всеми ключами.

Объект.значения

Метод Object.values() возвращает массив значений объекта. Этот метод имеет временную сложность O(n), потому что он должен перебирать все значения в объекте. Пространственная сложность Object.values() также равна O(n), потому что она должна создать новый массив со всеми значениями.

Объект.записи

Метод Object.entries() возвращает массив пар ключ/значение объекта в виде массивов. Этот метод имеет временную сложность O(n), потому что он должен перебирать все пары ключ/значение в объекте. Пространственная сложность Object.entries() также равна O(n), потому что она должна создать новый массив со всеми парами ключ/значение.

Объект.назначить

Метод Object.assign() позволяет копировать свойства одного объекта в другой объект. Этот метод имеет временную сложность O(n), потому что он должен перебирать все свойства исходного объекта. Пространственная сложность Object.assign() также равна O(n), потому что она должна создать новый объект со всеми свойствами.

Заключение

В заключение, и массивы, и объекты имеют свой собственный уникальный набор методов для ввода и доступа. С точки зрения временной и пространственной сложности производительность каждого метода зависит от размера структуры данных и конкретного используемого метода.

У массивов есть методы, оптимизированные для добавления и удаления элементов в начале или конце массива, а у объектов есть методы, оптимизированные для перебора ключей, значений и пар ключ/значение. В целом, массивы обычно быстрее для операций, которые включают конец структуры данных, в то время как объекты обычно быстрее для операций, которые включают в себя итерацию по ключам или значениям.

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