从字符串数组中获取最大值/最小值(javascript)

时间:2019-02-13 15:10:57

标签: javascript

有什么想法可以从字符串数组中计算最小/最大吗?

var arr = ['aab','aac','aad','abx'];

到目前为止,我已经考虑根据最大/最小使用.sort()函数,并获得结果的第一个元素。

但是也许您知道更好的预成型解决方案?

编辑:数组大小小于1k个元素。最小值/最大值是指字母排序:第一个和最后一个元素。

5 个答案:

答案 0 :(得分:1)

以下是一些解决问题的方法:

基于长度的最小/最大

const output = arr.sort((a, b) => a.length - b.length);

最小/最大字母顺序

const output = arr.sort();

提取最小值和最大值

const max = arr.sort(() => 1)[0];

答案 1 :(得分:1)

遍历列表,并在每个迭代步骤中更新最小值和最大值

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.log(getMinMax(['abc', 'aaa', 'abb']));

对于大型数组,它应该比sort()快得多。此算法为O(n),而sort()至少为O(n log(n))。

答案 2 :(得分:1)

如果您不想使用排序,

另一种选择是使用Array.reduce来保持minmax的值。

下面是显示此内容的有效代码段。

ps。您的测试数据已经将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.log(ret);

答案 3 :(得分:0)

您可以一次性使用reduce,但必须检查数组为空时返回什么(当前的min和max都返回未定义)

const arr = [
  'aab',
  'aac',
  'aad',
  'abx',
];

console.log(
  arr.reduce(
    ([min, max], item) => [
      min.localeCompare(item) > 0
        ? item
        : min,
      max.localeCompare(item) < 0
        ? item
        : max,
    ],
    [arr[0], arr[0]],
  ),
);

答案 4 :(得分:0)

这就是我所做的(请注意,它会使原始数组发生变化):

const myArray = ['beta', 'alpha', 'zeta', 'delta'];
const min = myArray.sort()[0];
const max = myArray.sort().reverse()[0];
console.log({ min, max });