Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

var mean = data.reduce(sum)/data.length;

var deviations = data.map(function(x) {return x-mean;});

var stddev = Math.sqrt(deviations.map(square).reduce(sum)/(data.length-1));

A как быть, если в нашем распоряжении имеется только реализация ЕСМА-Script 3, где отсутствуют эти новейшие методы массивов? Можно определить собственные функции mар и reduce, которые будут использовать встроенные методы при их наличии:

// Вызывает функцию f для каждого элемента массива и возвращает массив результатов.

// Использует метод Array.prototype.mар, если он определен,

var mар = Array.prototype.тар

? function(a, f) { return a.map(f); } // Если метод map доступен

: function(a,f) { // Иначе реализовать свою версию

var results = [];

for(var і = 0, len = a.length; і < len; і++) {

if (і in a) results[i] = f.call(null, a[i], і, a);

}

return results;

};

// Выполняет свертку массива в единственное значение, используя функцию f

// и необязательное начальное значение. Использует метод Array.prototype.reduce,

// если он определен.

var reduce = Array.prototype.reduce

? function(a, f, initial) { // Если метод reduce доступен,

if (arguments.length > 2)

return a.reduce(f, initial); // Если указано начальное значение,

else return a.reduce(f); // Иначе без начального значения.

}

: function(a, f, initial) { // Этот алгоритм взят из спецификации ES5

var і = 0, len = a.length, accumulator;

// Использовать указанное начальное значение или первый элемент а

if (arguments.length > 2)

accumulator = initial;

else { // Найти первый элемент массива с определенным значением

if (len == 0) throw TypeError;

while(i < len) {

if (i in a) {

accumulator = a[i++];

break;

}

else i++;

}

if (i == len) throw TypeError;

}

// Теперь вызвать f для каждого оставшегося элемента массива

while(i < len) {

if (і in а)

accumulator = f.call(undefined, accumulator, a[i], i, a);

i++;

}

return accumulator;

};

После определения этих функций

map
и
reduce
вычисление среднего и стандартного отклонения будет выглядеть так:

var data = [1,1,3,5,5];

var sum = function(x.y) { return x+y; };

var square = function(x) { return x*x; };

var mean = reduce(data, sum)/data.length;

var deviations = map(data, function(x) {return x-mean;});

var stddev = Math.sqrt(reduce(map(deviations, square), sum)/(data.length-1));

8.8.2. Функции высшего порядка

Функции высшего порядка - это функции, которые оперируют функциями, принимая одну или более функций и возвращая новую функцию. Например:

// Эта функция высшего порядка возвращает новую функцию, которая передает свои аргументы

// функции f и возвращает логическое отрицание значения, возвращаемого функцией f;

function not(f) {

return function { // Возвращает новую функцию

var result = f.apply(this, arguments); // вызов f

Поделиться:
Популярные книги

Точка Бифуркации

Смит Дейлор
1. ТБ
Фантастика:
боевая фантастика
7.33
рейтинг книги
Точка Бифуркации

Искатель 1

Шиленко Сергей
1. Валинор
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Искатель 1

Спасите меня, Кацураги-сан! Том 4

Аржанов Алексей
4. Токийский лекарь
Фантастика:
городское фэнтези
попаданцы
дорама
фэнтези
5.00
рейтинг книги
Спасите меня, Кацураги-сан! Том 4

Олд мани

Голд Яна
Любовные романы:
современные любовные романы
остросюжетные любовные романы
фемслеш
5.00
рейтинг книги
Олд мани

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Проводник

Кораблев Родион
2. Другая сторона
Фантастика:
боевая фантастика
рпг
7.41
рейтинг книги
Проводник

Семь Нагибов на версту

Машуков Тимур
1. Семь, загибов на версту
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Семь Нагибов на версту

Матабар IV

Клеванский Кирилл Сергеевич
4. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар IV

Последний Паладин. Том 11

Саваровский Роман
11. Путь Паладина
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Последний Паладин. Том 11

Ученик

Листратов Валерий
2. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Ученик

Газлайтер. Том 1

Володин Григорий
1. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 1

Московское золото и нежная попа комсомолки. Часть Пятая

Хренов Алексей
5. Летчик Леха
Фантастика:
попаданцы
5.00
рейтинг книги
Московское золото и нежная попа комсомолки. Часть Пятая

Лекарь Империи 4

Карелин Сергей Витальевич
4. Лекарь Империи
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 4

Гримуар темного лорда VII

Грехов Тимофей
7. Гримуар темного лорда
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда VII