Что лучше / эффективнее в coffeescript при запуске цикла for? - PullRequest
2 голосов
/ 24 сентября 2011

Существует два функционально эквивалентных способа написания следующей функции в javascript, которая лучше или эффективнее и почему?

(str) ->
  s = 0
  for i in [0...str.length]
    s += str.charCodeAt i 
  s

или

(str) ->
  s = 0
  for i in str
    s += i.charCodeAt 0 
  s

В сторону: Можете ли выпредложить другие способы сделать это?

Редактировать: Согласно JSPerf, первый быстрее: http://jsperf.com/coffee-for-loop-speed-test - почему это?

Ответы [ 2 ]

5 голосов
/ 24 сентября 2011

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

1 голос
/ 26 сентября 2011

Вы знакомы с функциональным программированием ?Coffeescript + Underscore.js работать вместе довольно круто.Вы можете использовать либо собственный Array#reduce, определенный в ECMAScript 5, либо функцию подчеркивания.Пример для первого:

(s.charCodeAt(0) for s in "hello").reduce((acc, x) -> acc + x) # 532 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...