#javascript
#javascript
Вопрос:
Редактировать
Многие люди предлагают Array.isArray()...
, с чем я не согласен. На самом деле это то, от чего я отошел. Простая причина в том, что он становится уродливым с более длинными именами переменных. Вместо этого мы можем оставить комментарий. Но я уверен, что есть лучший способ…
longerVariableName = [longerVariableName].flat() //normalizes
longerVariableName = Array.isArray(longerVariableName) ? longerVariableName : [longerVariableName]
Оригинал
Не уверен, что «поэтический» — правильное слово; но у меня часто есть переменные типа string | string[]
. Я хочу нормализовать их, чтобы просто [string]
упростить работу.
Самый короткий способ, о котором я могу думать, это [var].flat()
т.е. если это не массив, превратите его в массив. Если это уже массив, оставьте его в покое.
Однако проблема с приведенным выше методом заключается в том, что я чувствую, что его не очень легко понять, особенно для других. Я мог бы оставить комментарий, но это как бы сводит на нет суть краткости.
У кого-нибудь есть другие предложения?
Комментарии:
1. Пишите понятный, читаемый код, не пытайтесь выглядеть хитро, умно или поэтично.
Array.isArray(arg) ? arg : [arg]
2. @CertainPerformance Я бы поддержал это как ответ. Просто чтобы объяснить, почему: существуют конкурирующие цели в отношении удобочитаемости. 1. меньше кода для чтения, 2. очевидность кода. Если у вас есть очень распространенный шаблон, то цель 1 достигается просто потому, что общий шаблон становится настолько простым, что его практически не нужно «читать» вообще. Таким образом, очень очевидный, понятный однострочник, который легко распознать и мысленно проанализировать, обычно является лучшим вариантом.
3. Может быть, «идиоматический»? В любом случае, согласитесь, что @CertainPerformance — это правильный путь
4. @user1543574 Если у вас есть какое-то глобально доступное место для его хранения, вы можете назвать функцию
asArr
и использовать ее везде. Если вы используете его часто, не имеет значения, что вы используете, если оно согласовано, потому что, как только читатель поймет, что это значит один раз, оно применяется ко всем экземплярам. Предположительно, вы ставите это во главу многих функций?
Ответ №1:
Как насчет этого?
[].concat(arrayOrString);
Ответ №2:
Пишите понятный, читаемый код, не пытайтесь выглядеть хитро, умно или поэтично.
Array.isArray(arg) ? arg : [arg]
Это очень легко читать. Его можно было бы сделать короче, но это произошло бы за счет понятности, и поэтому оно того не стоило, IMO. Написание хорошего программного обеспечения — это не соревнование по код-гольфу.