Сначала отсортируйте только нечетные числа и поместите их в массив oddSorted
. Затем выполните map
через каждый элемент в исходном массиве и проверьте, является ли текущий элемент нечетным , если нечетным замените его на соответствующий отсортированный номер из массива oddSorted
. [116 ]
function sortOddElements(arr){
var oddSorted = arr.filter(ele => ele %2 != 0).sort((a, b) => a - b);
var evenNotSorted = arr.map((ele, idx) => {
if(ele % 2 != 0){
return oddSorted.shift();
}
return ele;
});
return evenNotSorted;
}
var arr = [5, 3, 2, 8, 1, 4];
console.log(sortOddElements(arr));
arr = [5, 3, 2, 8, 1, 4, 11 ];
console.log(sortOddElements(arr));
Можно сделать как предложенный Dib с небольшой модификацией:
// In a wrapper header, eg: include_oldlib.h...
namespace oldlib
{
#include "oldlib.h"
};
#ifndef DONT_AUTO_INCLUDE_OLD_NAMESPACE
using namespace oldlib;
#endif
Это позволяет Вам #define исключение только в файлах, где Вы получаете конфликты и используете все символы в качестве глобальных символов иначе.
Вы могли сделать обертку для всех старых функций и упаковать их в DLL или статическую библиотеку.
Если Вы имеете источник к библиотеке, возможно, включаете заголовочный файл наверху каждого источника, где тот заголовочный файл имеет только:
#define TObject TMadeUpNameObject
Попробуйте это:
namespace oldlib
{
#inclcude "oldlib.h"
};
Я использовал следующее в прошлом при инкапсуляции стороннего заголовочного файла, содержащего классы, сталкивающиеся с кодом:
#ifdef Symbol
#undef Symbol
#define Symbol ThirdPartySymbol
#endif
#include <third_party_header.h>
#undef Symbol
Таким образом, "Символ" в заголовке был снабжен префиксом ThirdParty, и это не сталкивалось с моим кодом.