У меня возникают проблемы с переносом моего мозга вокруг проблемы с использованием функции прототипа в массиве при ее сортировке. Я могу заставить его работать с статическим элементом, но когда я пытаюсь обобщить работу над массивом, я начинаю видеть ошибки «не является функцией». Вот мое текущее исполнение кода. Любая помощь будет оценена по достоинству.Доступ к функции прототипа при сортировке массива?
function Automobile(year, make, model, type) {
this.year = year; //integer (ex. 2001, 1995)
this.make = make; //string (ex. Honda, Ford)
this.model = model; //string (ex. Accord, Focus)
this.type = type; //string (ex. Pickup, SUV)
}
Automobile.prototype.logMe = function(bool) {
console.log("Working"); //testing function
if (bool == true) {
console.log(this);
}
};
/*Sample Array*/
var automobiles = [
new Automobile(1995, "Honda", "Accord", "Sedan"),
new Automobile(1990, "Ford", "F-150", "Pickup"),
new Automobile(2000, "GMC", "Tahoe", "SUV"),
new Automobile(2010, "Toyota", "Tacoma", "Pickup"),
new Automobile(2005, "Lotus", "Elise", "Roadster"),
new Automobile(2008, "Subaru", "Outback", "Wagon")
];
/*This function sorts arrays using an arbitrary comparator.*/
function sortArr(comparator, array) {
array.sort(function(a, b) {
return comparator(a, b);
});
return array;
}
function exComparator(int1, int2) {
if (int1 > int2) {
return true;
} else {
return false;
}
}
function yearComparator(auto1, auto2) {
return exComparator(auto1.year, auto2.year);
}
/* Output*/
console.log("*****");
console.log("The cars sorted by year are:");
forEach(sortArr(yearComparator, automobiles), automobiles.logMe(true)); //This is not right!
function forEach(array, doStuff) {
for (var i = 0; i < array.length; i++)
doStuff(array[i]);
}
Функции компаратора сортировки не должны возвращать только «истинные» или «ложные». Вместо этого они должны возвращать отрицательное число, ноль или положительное число, чтобы указать, что первое значение должно идти до другого, если они одинаковы или что второе значение должно идти до первого. – Pointy
также, ваша функция sortArr _ функционально идентична_ 'array.sort (компаратор)' – Alnitak
[Ваша функция сравнения недействительна] (http://stackoverflow.com/q/24080785/1048572), но это не проблема «иметь с« forEach ». – Bergi