Написал функцию рандома для чисел и массивов с исключением. Всё работает, но проблема в том, что код вышел уж слишком большим для такой функции. Как можно оптимизировать (уменьшить) данную функцию?
(function() {
$.random = function(int__min, int__max, exceptions, tof__integer) {
if (int__min instanceof Array) {
var int__min_length = int__min.length - 1,
arr_exceptions = null;
if (int__max instanceof Array) {
arr_exceptions = [];
$.each(int__max, function(idx, el) {
arr_exceptions[arr_exceptions.length] = int__min.indexOf(el);
});
} else {
arr_exceptions = int__min.indexOf(int__max);
};
return int__min[$.random(0, int__min_length, arr_exceptions, true)];
} else if (typeof int__min === 'number' && typeof int__max === 'number') {
if (!int__min) int__min = 0;
if (!int__max) int__max = 10;
if (int__min > int__max) {
var int__min_val = int__min,
int__max_val = int__max;
int__min = int__max_val;
int__max = int__min_val;
};
var int__random = null;
if (tof__integer === undefined || tof__integer === true) {
int__random = Math.floor(Math.random() * (int__max + 1 - int__min) + int__min);
} else {
int__random = Math.random() * (int__max + 0.1 - int__min) + int__min;
};
if (typeof exceptions === 'number' || typeof exceptions === 'string') {
if (exceptions !== int__random) {
return int__random;
} else {
return $.random(int__min, int__max, exceptions, tof__integer);
};
} else if (exceptions instanceof Array) {
var tof__resolution = true;
$.each(exceptions, function(idx, el) {
if (int__random === el) tof__resolution = false;
});
if (tof__resolution) {
return int__random;
} else {
return $.random(int__min, int__max, exceptions, tof__integer);
};
} else {
return int__random;
};
} else {
console.error('UARR.RANDOM: Invalid values!');
};
};
})();
(function() {
console.log( $.random( 0, 10, null, false ) );
console.log( $.random( 0, 10, null, true ) );
console.log( $.random( 0, 10, [5, 6, 7, 8] ) );
console.log( $.random( ['a', 'b', 'c'], 'a' ) );
console.log( $.random( ['a', 'b', 'c'], ['a', 'c'] ) );
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
Для чисел:
$.random( a, b, c, d );
a - Минимальное число
b - Максимальное число
c - Исключения (число, которое не нужно показывать. Можно указывать массивом)
d - Целые числа или нет (true/false)
Для массивов:
$.random( a, b );
a - Массив данных
b - Исключения (значения, которые не нужно показывать. Можно указывать массивом)
Не все кейсы понятны (например вот это немного порвало мне мозг -
console.log( $.random( 0, 10, [5, 6, 7, 8] ) );
какой тут смысл в exceptions?
Но вот я сделял, в два раза короче и без жуквери:
$ = {};
$.random = function(from, ...args) {
let results = [];
let exceptions;
switch(true){
case (from instanceof Array):
exceptions = (args[0] && !(args[0] instanceof Array)) ? [args[0]] : (args[0] || []);
results = from;
break;
case args[2]:
exceptions = args[1] || [];
for(let i = from; i<=args[0]; i++) results.push(i);
break;
default:
exceptions = args[1] || [];
do results = from + (args[0]-from)*Math.random();
while(exceptions.includes(results));
return results;
}
results = results.filter(el => !exceptions.includes(el));
return results[Math.floor(Math.random()*results.length)];
};
console.log( $.random( 0, 10, null, false ) );
console.log( $.random( 0, 10, null, true ) );
console.log( $.random( 0, 10, [5, 6, 7, 8], true ) );
console.log( $.random( ['a', 'b', 'c'], 'a' ) );
console.log( $.random( ['a', 'b', 'c'], ['a', 'c'] ) );
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Привет всем, я скопипастил себе код для вызова URL, вызов срабатывает, но обработку возвращаемого значения сделать не получается
Добрый день, при нажатии на кнопку onclick='audioRecorderopen(this) спрашивает разрешение на микрофон и при нажатии на разрешить запись сразу стартует,...