Любые идеи для вычисления min/max из массива строк?
var arr = ['aab','aac','aad','abx'];
До сих пор я рассматривал возможность использования функции .sort() в зависимости от макс/мин и получения первого элемента результата.
Но, может быть, вы знаете лучшее решение для преформирования?
Обновлено: размер массива меньше 1 тыс. элементов. Под Min/max я имел в виду алфавитную сортировку: первый и последний элемент.
Что вы считаете «минимум» и «максимум» строки в этом случае?
Я не понимаю. Как вы хотите рассчитать максимум или минимум строки?
Что ж, если бы сортировка давала осмысленный ответ, то что-то вроде .localeCompare() можно было бы использовать за один проход.
ОП сказал, что он рассматривал сортировку, поэтому max / min можно было бы предположить, что это альфа-сортировка, первая и последняя.
Перебирайте свой список и обновляйте минимум и максимум на каждом шаге итерации.
«лучшее предварительное решение», если это размер ваших данных, производительность сортировки должна быть наименьшей из ваших проблем.
Я дал ответ, но я чувствую, что этот вопрос должен быть улучшен. Что вы имеете в виду под max/min
Размер массива меньше 1k элементов. Под Min/max я имел в виду алфавитную сортировку первого и последнего элемента.
минимум - это элемент множества, для которого в том же множестве не существует меньших элементов. Таким образом, некоторые базы данных определяют минимум для всех доступных для заказа типов данных. Также у python есть minium, который работает и со String. Некоторые также поддерживают сумму строк.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вот несколько решений, на которые стоит обратить внимание:
Мин./макс. в зависимости от длины
const output = arr.sort((a, b) => a.length - b.length);
Мин./макс. в алфавитном порядке
const output = arr.sort();
Извлеките минимум и максимум
const max = arr.sort(() => 1)[0];
Пока вы это делаете, вы также должны показать, как извлечь минимум и максимум, поскольку это вопрос.
@ФедерикоклезКуллока. Отмеченный
Я вижу, вы изменили ответ, но будьте осторожны, он дает TypeError для аргумента sort
Спасибо, что обратили на это мое внимание
Послушайте, извините, если я вас мучаю, но та функция, которую вы использовали для сортировки, на самом деле не сортирует. Поскольку ОП сказал, что они имели в виду лексикографическую сортировку, вы можете просто использовать const min = arr.sort()[0]; для извлечения мин. И вам все еще не хватает max.
@FedericoklezCulloca, на самом деле это не так. Я считаю, что он может просто запустить arr.sort().reverse()[0], чтобы получить максимальное значение
Перебирайте свой список и обновляйте минимум и максимум на каждом шаге итерации.
function getMinMax(arr) {
if (!arr) {
return null;
}
var minV = arr[0];
var maxV = arr[0];
for (a of arr) {
if (a < minV) minV = a;
if (a > maxV) maxV = a;
}
return [minV, maxV];
}
console.info(getMinMax(['abc', 'aaa', 'abb']));Это должно быть намного быстрее, чем sort() для больших массивов. Этот алгоритм является O (n), в то время как sort() не менее O (n log (n)).
Если вы не хотите использовать сортировку, .
Другой вариант — использовать Array.reduce для сохранения значений min и max.
Ниже приведен рабочий фрагмент, показывающий это.
пс. В ваших тестовых данных уже был минимальный элемент в качестве первого элемента и максимальный элемент в качестве последнего элемента, поэтому я изменил пример массива, чтобы он имел zzz, что, конечно же, будет max.
var arr = ['aab','aac','zzz','aad','abx'];
var ret = arr.reduce((a, v) => {
a.min = a.min === null ? v :
v.localeCompare(a.min) < 0 ? v : a.min;
a.max = a.max === null ? v :
v.localeCompare(a.max) > 0 ? v : a.max;
return a; },
{min: null, max: null});
console.info(ret);Вы можете использовать сокращение за один проход, но вам нужно проверить, что вернуть, если массив пуст (в настоящее время возвращает значение undefined как для минимального, так и для максимального значения)
const arr = [
'aab',
'aac',
'aad',
'abx',
];
console.info(
arr.reduce(
([min, max], item) => [
min.localeCompare(item) > 0
? item
: min,
max.localeCompare(item) < 0
? item
: max,
],
[arr[0], arr[0]],
),
);Вот что я сделал (обратите внимание, что он мутирует исходный массив):
const myArray = ['beta', 'alpha', 'zeta', 'delta'];
const min = myArray.sort()[0];
const max = myArray.reverse()[0];
console.info({ min, max });
что такое
maxиminв данном случае?