Найти минимальное значение из массива
Есть код:
function min(obj) {
var a;
for (var i = 0; i < obj.length; i++) {
if (obj[i] < obj[0]) {
a = obj[i];
}
}
return a;
}
Я полагаю что ошибка в ифе и что надо сравнивать со всеми объектами из массива, но не понимаю как это сформулировать. |
Colonelo,
function min(obj) {
var a = obj[0];
for (var i = 1; i < obj.length; i++) {
if (obj[i] < a) {
a = obj[i];
}
}
return a;
}
|
function min(obj) {
return Math.min.apply(Math, obj);
}
ES6: const min = obj => Math.min(...obj); |
Спасибо за быстрый ответ
|
А как найти второе по величине число из такого же массива?
|
var x = obj.sort((a,b)=> a-b)[1]; дубли не игнорируются |
var x = obj.filter((v, i, s)=>s.indexOf(v) === i).sort((a,b)=> a-b)[1]; дубли игнорируются |
А без использования сортировки?
|
var x = Math.min(...obj.filter(el=> el > Math.min(...obj))); |
Colonelo,
function min(obj) {
var a = [obj[0]];
for (var i = 1; i < obj.length; i++) {
for (var k = 0; k < a.length; k++)
if (obj[i] < a[k]) break;
a.splice(k, 0, obj[i])
}
return a
}
alert(min([4, 8, 1, 12, -3, 1]));
|
Для взятия K минимальных значений из N-элементного массива юзается "куча" (heap)
сложность выходит N*ln(K), и вроде быстрее нельзя. |
Большое спасибо за помощь
|
| Часовой пояс GMT +3, время: 18:29. |