Я немного изменил твой код для достижения твоей цели. Посмотрите ниже
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
}
return arr.sort(function(a, b){return a - b});
}, []);
var index = 0;
var finalElements = [];
for(var i=0; i<array.length; i++) {
var element = array[i];
if(element %2 !==0) {
finalElements.push(oddElements[index]);
index++;
} else {
finalElements.push(element);
}
}
return finalElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4, 11]));
Помните, функция сортировки по умолчанию сортирует значения по алфавиту. Вот почему вы не можете просто использовать arr.sort ()
Если Вы обеспокоены материалом базы данных в классах - Вы рассмотрели использование картопостроителя O/R?
Это сохранило бы материал базы данных полностью от Вашего кода и Ваших объектов области чистым.
Возможно, смотрите на NHibernate или Активную Запись.
Нет, это не глупо вообще, на самом деле, это - путь, как все должны сделать это. Бизнес-объект не должен содержать логику персистентности.
Btw при использовании C# 3.0, затем Вы даже не могли бы обеспокоиться классом Фабрики. Просто создайте дополнительные методы. Тем путем Вы можете все еще иметь свой код персистентности, изолированный от бизнес-объекта, и все еще смочь назвать myObject. Сохраните ().
Класс фабрики является creational шаблоном, который помогает с созданием новых объектов.
Существуют различные шаблоны, которые имеют дело с сохранением объектов, один из которых является картопостроителем данных http://martinfowler.com/eaaCatalog/dataMapper.html
Это часто используется в conjection с Репозиторием http://martinfowler.com/eaaCatalog/repository.html
Можно использовать эти шаблоны, чтобы абстрагировать базу данных далеко от домена/бизнес-объектов и получить доступ к ним из приложения, чтобы запросить и сохранить объекты.
Таким образом, картопостроитель/репозиторий данных ответственен за оба аспекта персистентности (заполняющий от базы данных и сохраняющий назад к базе данных).