Преобразует ли JS-коммутатор / типы для сравнения оператора switch с значениями [duplicate]

Возможно, я не понимаю ваши намерения, но кажется, что вы хотите, чтобы элементы из masterA, имеющие нечетные индексы, должны храниться в oddA, и, наоборот, элементы masterA, которые имеют даже индексы, должны храниться в evenA.

Вы можете добиться этого, отфильтровывая masterA wrt индексы masterA, легко доступные из masterA.enumerated().

let masterA = [4, 5, 2, 1, 7, 8, 1]

let evenA = masterA.enumerated().filter { $0.0 % 2 == 0 }.map{ $0.1 }
let oddA = masterA.enumerated().filter { $0.0 % 2 != 0 }.map{ $0.1 }

print(evenA) // [4, 2, 7, 1]
print(oddA)  // [5, 1, 8]

Как отмечает @Hamish в своем комментарии ниже, мы могли бы использовать compactMap (Swift 3: flatMap) как альтернатива цепным filter и map.

let evenA = masterA.enumerated().compactMap { $0 % 2 == 0 ? $1 : nil }
let oddA = masterA.enumerated().compactMap { $0 % 2 != 0 ? $1 : nil }

Последнее compactMap решение является более кратким, тогда как решение filter ... map, возможно, показывает намерение немного яснее. В этом конкретном соперничестве по сравнению с семантикой я лично предпочел бы решение compactMap.

79
задан Pang 25 July 2016 в 09:12
поделиться

3 ответа

Взгляните на ECMA 262, раздел 12.11 , второй алгоритм, 4.c.

c. Если входной сигнал равен clauseSelector, как определено оператором ===, тогда ...

78
ответ дан luiges90 19 August 2018 в 07:54
поделиться

Попробуйте:

    switch(1) {
      case '1':
        alert('Switch comparison is NOT strict.');
        break;
      case 1:
        alert('Switch comparison is strict.');
        break;
      default: 
        alert('Huh?');
    }

39
ответ дан Damjan Pavlica 19 August 2018 в 07:54
поделиться
  • 1
    Вздох, я никогда не буду привыкать к downvotes. – David Winiecki 23 September 2014 в 17:50
  • 2
    Хорошо, причина, по которой я получаю downvotes, заключается в том, что для этого, чтобы ответить на вопрос, вам нужно попробовать его на каждом движке JavaScript, который мог бы запустить ваше приложение или библиотеку JavaScript, что может быть очень много. Тем не менее, я большой поклонник тестирования даже основной функциональности. Независимо от того, насколько авторитетной является документация, она не может гарантировать, что все основные реализации соответствуют, и самый определенный способ узнать это проверить. – David Winiecki 2 February 2015 в 16:19
  • 3
    Я подтвердил ваш второй комментарий, потому что вы правильно тестируете. И как разработчик, я возьму на себя ответственность за работу кода над определенным набором браузеров - те, которые, как я знаю, были протестированы. OTOH, если мы не можем полагаться на авторитетную документацию, в чем смысл stackoverflow.com? – Michael Scheper 2 June 2015 в 21:32

http://qfox.nl/notes/110 отвечает на ваш вопрос. (Этот парень много знает о nitty gritty JavaScript)

Переключатели в Javascript используют строгую проверку типов (===). Поэтому вам никогда не придется беспокоиться о принуждении, которое предотвращает несколько wtfjs :). Если, с другой стороны, вы рассчитывали на принуждение, неудачу, потому что вы не можете заставить его.

27
ответ дан Halcyon 19 August 2018 в 07:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: