Partizanin: Или можете прислушаться к совету Jeiwan — передать callback-функцию дополнительным параметром и вызвать эту функцию вместо создания и резолва объекта.
Вы внутри функции changContent должны сделать то, что я написал:
function changContent (/*тут ваши аргументы*/) {
var defer = $/Deferred();
//тут что-то делаем и после всего резолвим
defer.resolve();
return defer.promise();
}
Jeiwan: Человек может прочитать ваши слова и поверить, что «sort, кстати, тоже перебирает массив поэлементно».
Механизм передачи callback-функции используется, например, в Promise, что не делает этот «финт» аналогичным методам прототипа Array, которые вы перечислили.
Если для вас передача ссылки на функцию есть признак чего-то единого, то кто же из нас мыслит шаблонами?)
Jeiwan: Чтобы вы не писали уверенно неверную информацию.
Методы forEach, map, filter, reduce перебирают массив тупо по элементу за каждую итерацию. Количество итераций будет строго равно количеству элементов.
Метод sort перебирает по алгоритму сравнения (который может отличаться в разных имплементациях) и зависит от результатов сравнения. Для массива из 4-х элементов количество вызовов может быть и 4, и 5, и 6.
Перебор элементов и сравнение значений по алгоритму — суть разные принципы.
Jeiwan: Речь не о количестве параметров, а о количестве элементов, значения которых получает функция.
sort() получает два значения, а все перечисленные вами методы только единственное.
Наверное, чтобы ТС понял, добавлю, что элементы массива сравниваются попарно, а функция сравнения должна отдать 1 или -1. В зависимости от полученного числа элементы или меняются местами, или остаются на них.
Александр: Да, проверил в IE — с utf8 проблемы. Так что да, из-за проблем с таким описанием увы, напрямую код не получится вставить.
Если найду корень зла в фоновых SVG для IE, сообщу:)