2016-09-03 7 views
1

уничтожение того На codewars, есть следующий вопрос:Объяснение на

Описание:

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

Чтобы быть старшим, члену должно быть не менее 55 лет и иметь гандикап, превышающий 7. В этом клубе для крокет, гандикапы варьируются от -2 до +26; чем лучше игрок, тем ниже гандикап.

Входной

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

Пример ввода

[[18, 20], [45, 2], [61, 12], [37, 6], [21, 21], [78, 9 ]]

Выход

Выход будет состоять из списка строковых значений (в Haskell: Open или старший) с указанием того, соответствующий член должен быть помещен в сени или или открытой категории.

Результат

[ "Открыть", "Открыть", "старший", "Открыть", "Открыть", "старший"]

Один ответ был красивый в своей простоте:

function openOrSenior(data) { 
    return data.map(([age, handicap]) => (age > 54 && handicap > 7) ? 'Senior' : 'Open'); 
} 

Это делает использование деструктуризации, и хотя я прочитал на нем, у меня не очень хорошее понимание как это работает. Итак, вот вопрос: что здесь происходит? Как это работает (в простейших условиях)?

+0

Что именно неясно? – melpomene

+0

Параметр считается кортежем (двухэлементный массив), первый элемент которого присваивается «age», а второй - «гандикап». –

+0

Что неясно, как именно он сопоставляет его с возрастом и гандикапом. Что он делает?Карта берет функцию, поэтому по существу у нас есть функция ([возраст, гандикап]) {}, переданная функции карты. карта действует на массив данных, для каждого элемента, который является массивом сам по себе. Является ли это чем-то большим, чем назначение того, что находится в массиве-члене для переменных? –

ответ

1
function openOrSenior(data) { 
    return data.map(([age, handicap]) => (age > 54 && handicap > 7) ? 'Senior' : 'Open'); 
         ^^^^^^^^^^^^^ 
         destructuring 
} 

Это простая реализация карты. Единственное, о чем стоит упомянуть, это деструктивная часть, в которой [age, handicap] сначала присваивается [18,20], что означает, что age присваивается 18 и handicap присваивается 20.

+0

Это так просто, да? Я думаю, что я неправильно читаю какую-то часть документации, есть другая нотация при работе с массивами по сравнению с обработкой объектов, т. Е. Деструктурирование с использованием массивов [] с левой стороны и деструктурирование с использованием объектов {} с левой стороны. Я замаскировался с помощью [] с деструктивными массивами, и когда я увидел это, он не щелкнул. Получил это сейчас, потрясающе! –