Большинство людей с практическими целями используют String в качестве индекса массива при работе с быстрыми реализациями в JavaScript/Node, но поведение массива меняется.

JavaScript — хороший и прямой язык для работы с массивами и создания чего-то с использованием нативных методов. Гибкость позволяет пользователю совершать большие ошибки. Прежде чем начать, запомните основные определения массива и словаря.

  • Словарь — это объект, в котором хранятся пары ключ-значение.
  • Вы можете создать словарь, используя фигурные скобки {}, и получить доступ к значениям, используя запись через точку или скобки.
  • Каждый ключ представляет собой строку, связанную со значением любого типа.
  • Массив — это объект, в котором хранится список значений в определенном порядке.
  • Каждое значение имеет индекс, указывающий его положение в массиве.
  • Вы можете создать массив, используя квадратные скобки [] и получить доступ к значениям, используя индекс (начиная с 0).

Основное различие между словарем и массивом заключается в том, что словарь использует ключи для доступа к значениям, а массив использует индексы для доступа к значениям. Ключи — это строки, которые может выбрать программист, а индексы — это числа, которые автоматически присваиваются системой.

Представьте себе сценарий, в котором вам нужно сохранить данные в переменной, используя ключ для сохранения значений. Ключом может быть название города, а поле данных — соответствующее население. Чтобы не использовать словарь, вы решили использовать массив, а чтобы не использовать метод .push(), используйте название города в качестве индекса из массива, см. пример ниже:

var cityList = []
cityList['Orlando'] = 309154

На данный момент вроде «хорошо», но этот «массив» не имеет длины и не может работать с методом for.

console.log(cityList['Orlando']) //The return will be 309154
console.log(cityList.length) //The return will be 0
for (let data of cityList) {
  console.log(data) //This console never occours
}

Это происходит потому, что после использования строки в качестве индекса массива вы устанавливаете свойство объекта, например, словарь. Если вы используете .push() в массиве, эта новая часть будет работать нормально.

Несмотря на практичность, использование массива в качестве словаря имеет свои проблемы. Не существует закона, определяющего лучший метод, это зависит от вашей реализации и ее масштабируемости, но в большинстве случаев array.push() может решить вашу проблему и избежать плохих реализаций в будущем.

Собственные методы массива

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

В Разработчиках Mozilla вы можете найти полную документацию по массивам в JavaScript, десятки методов, некоторые из которых, должен признаться, я никогда не использовал. Но для решения проблемы, описанной в этой статье, нам нужно использовать только метод .find(), например:

var cityList = []
cityList.push(cityName: 'Orlando', population: 309154})
let found = cityList.find(element => element.cityName== "Orlando")

Или, если вам нужно найти индекс элемента, вы можете просто использовать метод findIndex().

Производительность

До этого момента я приводил хорошие моменты для использования Array of Dictionary вместо использования Array как словаря, но для производительности у нас есть проблема? Может быть.

Когда вы используете слово поиска в качестве ключа, собственный поиск непосредственно по ключу выполняется быстрее, чем собственный метод array.find().

let elements = ["batata","limão","testedobom","abobora","batata","limão","testedobom","andorinha","xia","cacau","martelo","joia","infinito","cal","teste","pedra"]
let arrayFinal1 = []
let arrayFinal2 = []
for (let element of elements) {
    arrayFinal1.push({name : 1, index: element})
}
for (let element of elements) {
    arrayFinal2["element"] = 1
}
console.log(new Date())
for (let element = 0; element < 1000000000; element++ ) {
    const found = arrayFinal1.find(element => element.index == "joia");
}
console.log(new Date())
for (let element = 0; element < 1000000000; element++ ) {
    const found = arrayFinal2["joia"];
}
console.log(new Date())

Результаты консоли:

  • 18 секунд в первом для.
  • 0,5 секунды в секунду за.

Для небольшого массива разница не заметна, но для повторных находок разница может быть наиболее существенной. Конечно, это базовый пример, в реальных случаях в нем больше переменных, но это важно знать.

Заключение

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

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .