Я не верю, что возможно взаимодействовать с сгенерированными переменными, такими как _results
, непосредственно из CoffeeScript. Вы можете, однако, сделать это с помощью escape-JavaScript (который компилятор просто игнорирует):
Array::unique = ->
value for value in this when not (`value in _results`)
компилируется в
Array.prototype.unique = function() {
var value, _i, _len, _results;
_results = [];
for (_i = 0, _len = this.length; _i < _len; _i++) {
value = this[_i];
if (!value in _results) {
_results.push(value);
}
}
return _results;
};
Тем не менее, стилистически я думаю, что было бы предпочтительнее кодировать ваше понимание списка в чистом CoffeeScript. Это всего 3 строки:
Array::unique = ->
results = []
results.push value for value in this when value not in results
results
Что касается вашей реализации функции unique
(и я понимаю, что это немного в стороне), вы должны знать, что она не будет хорошо масштабироваться для больших N
, так как она должна повторяться через большие массивы (за исключением особых случаев, когда indexOf
времени выполнения имеет эффективность лучше, чем O (N)). Однако можно обрабатывать большие N
относительно эффективно, используя хэш; посмотрите предложенную мной реализацию Underscore.js _.uniq здесь .