В других языках, таких как Python 2 и Python 3, вы можете определять и присваивать значения переменной кортежа и получать их значения следующим образом:
tuple = ("Bob", 24)
name, age = tuple
print(name) #name evaluates to Bob
print(age) #age evaluates to 24
Есть ли что-нибудь подобное в JavaScript? Или мне просто нужно сделать это некрасиво с массивом:
tuple = ["Bob", 24]
name = tuple[0] //name Evaluates to Bob
age = tuple[1] //age Evaluates to 24
Есть ли лучший способ имитировать кортежи Python в JavaScript 5?
Обновление: см. Ответ относительно ES6, которому следует отдавать предпочтение перед CoffeeScript для новых проектов.
var tuple, name, age;
var name=tuple[0], age=tuple[1];
Это немного больше печатать, но некрасиво может быть преувеличением.Ответы:
В Javascript 1.7 добавлено деструктурированное назначение, которое позволяет вам делать то, что вам нужно.
источник
Вы должны делать это некрасиво. Если вам действительно нужно что-то подобное, вы можете проверить CoffeeScript , в котором есть это и множество других функций, которые делают его больше похожим на python (извините, что это звучит как реклама, но мне это очень нравится).
источник
Вы можете сделать что-то подобное:
а затем назовите имя и возраст атрибутами
источник
Object.freeze()
, например:tuple = Object.freeze({ name:'Bob', age:14 })
Эта функция "кортежа" называется деструктуризацией в EcmaScript2015 и скоро будет поддерживаться современными браузерами. На данный момент его поддерживают только Firefox и Chrome .
Но послушайте, вы можете использовать транспилер .
Код выглядел бы так же красиво, как python:
источник
Замороженный массив ведет себя идентично кортежу python:
Будьте фантазией и определите класс
Сегодня работает во всех последних браузерах.
источник
Кортежи не поддерживаются в JavaScript
Если вы ищете неизменяемый список, можно использовать Object.freeze (), чтобы сделать массив неизменяемым.
Источник: Сеть разработчиков Mozilla - Object.freeze ()
Назначьте массив как обычно, но заблокируйте его с помощью Object.freeze ()
Используйте значения, как обычный массив (множественное присвоение python не поддерживается)
Попытка присвоить новое значение
Но стоимость не изменилась
источник
К сожалению, вы не можете использовать этот синтаксис назначения кортежей в (ECMA | Java) Script.
РЕДАКТИРОВАТЬ: кто-то связан с Mozilla / JS 1.7 - это не будет работать в кросс-браузере, но если это не требуется, то вот ваш ответ.
источник
Это не предназначено для использования в реальной жизни, это просто интересное упражнение. Видеть Почему использование функции eval в JavaScript - плохая идея? для подробностей.
Это самое близкое, что вы можете получить, не прибегая к расширению, зависящему от производителя:
Вспомогательная функция:
Доказательство того, что он работает в произвольном объеме:
eval
не поддерживается в Safari.источник
В качестве обновления ответа министра теперь вы можете сделать это с помощью es2015:
https://jsbin.com/fubaluwimo/edit?js,console
источник
У вас также может быть тип кортежа в Javascript. Просто определите его с помощью функций высшего порядка (академический термин - кодировка Чёрча):
Обратите внимание, что
Tuple
он не используется как обычный конструктор. Решение вообще не полагается на систему-прототип, а исключительно на функции более высокого порядка.Каковы преимущества кортежей перед
Array
s, используемыми как кортежи? Кортежи в кодировке Church неизменяемы по замыслу и, таким образом, предотвращают побочные эффекты, вызванные мутациями. Это помогает создавать более надежные приложения. Кроме того, легче рассуждать о коде, который различаетArray
s как тип коллекции (например[a]
) и кортежи как связанные данные различных типов (например(a, b)
).источник
Вот простая реализация кортежа Javascript:
Это 2-кортеж, однако вы можете изменить мой пример для поддержки 3,4,5,6 и т. Д. Кортежей.
источник
tuple
Экземпляр остается изменчивым, так что это технически не кортеж. Для пруфа поменяйтеtuple.Item1 = "Steve"
потомconsole.log()
вывод.Вот версия ответа Мэтью Джеймса Дэвиса с добавленными методами кортежа Python:
источник