Литеральное определение объекта Javascript [дубликат]

Если ваша таблица является источником, и если NumberColumn имеет тип номера, это будет работать:

= Table.Group(Source, {"LetterColumn"}, {{"Column", each Text.Combine(List.Transform(_[NumberColumn], (x) => Number.ToText(x)), ","), type text}})

Table.Group выполняет группу по операции, которая создает таблицу, состоящую из всех строк с одинаковым значением в LetterColumn. _[NumberColumn] дает список значений в столбце NumberColumn в этой новой таблице. Часть List.Transform превращает числа в текстовые значения, а Text.Combine объединяет эти числа вместе с запятой, разделяющей каждое значение.

Если вам нужны окружающие кавычки, вы можете сделать это:

= Table.Group(Source, {"LetterColumn"}, {{"Column", each """" & Text.Combine(List.Transform(_[NumberColumn], (x) => Number.ToText(x)), ",") & """", type text}})

"""" представляет символ, а & amp; комбинирует два текстовых значения.

3
задан Aejay 20 June 2014 в 18:34
поделиться

2 ответа

Прежде всего, var o = {}; и var o = new Array(); не совпадают. Первый инициализирует объект, второй - массив. var o = {}; и var o = new Object(); эквивалентны.

Теперь о производительности использования литерала объекта вместо добавления свойств после. Какой из них самый быстрый? Ответ: нам все равно, и вы тоже этого не должны. Если есть разница в производительности, он будет настолько мал, что он никогда не повлияет, даже если вы сразу создадите 1 миллион объектов, что вряд ли когда-либо произойдет.

Это называется преждевременной оптимизацией и является проклятием многих промежуточных программистов. Не беспокойтесь об оптимизации чего-либо, если у вас не возникнут проблемы с производительностью. Затем вы используете профилировщик, чтобы определить, где находится узкое место, и решить его. Просто подумайте о создании своего приложения.

Для полноты, здесь это тест, который я запускал на jsperf . В моем браузере Chrome 15 инициализация объектного литерала была на 53% быстрее. Ничего себе, 53%, это правда? За исключением того, что вы наводите указатель мыши на подсказку для теста, который использует свойства после инициализации, вы увидите, что он говорит что-то вроде

Ran 681 285 раз за 0.077 секунд.

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

11
ответ дан Alex Turpin 23 August 2018 в 01:23
поделиться
  • 1
    Извините, это было ошибкой. Я имел в виду new Object();. Я должен был сделать еще одно чтение по моему вопросу. Спасибо за ваш вклад. Я не хочу заботиться о производительности до такой степени, что это негативно сказывается на моем процессе разработки, но я подумал, что было бы полезно разработать привычки для эффективных альтернатив для обычных процедур. – Aejay 5 December 2011 в 22:11
  • 2
    @Aejay Это действительно действительно не имеет значения, в конце концов. Я просто предлагаю вам использовать стиль, который вы предпочитаете, или выбрать его по другим причинам, кроме скорости, например, ясности. Я, для всего вышеперечисленного, предпочитаю буквальную нотацию. И как плюс, это самый быстрый :) – Alex Turpin 5 December 2011 в 22:15

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

Однако на основе этот JSPerf benchmark и размер выборки одного (в Chrome / Mac OS X), форма литерала объекта (o = {foo:'bar'}) намного больше , чем настройка свойств после построения (o={}; o.foo='bar').

3
ответ дан maerics 23 August 2018 в 01:23
поделиться
Другие вопросы по тегам:

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