找到数组中最短元素的第一个实例

问题描述 投票:0回答:6

编写一个名为“getLengthOfShortestElement”的函数。

给定一个数组,“getLengthOfShortestElement”返回给定数组中最短字符串的长度。

注意:*如果数组为空,则应返回0。

我的代码:

 function getLengthOfShortestElement(arr) {

  if (arr.length === 0) return 0;
       return arr.sort(function(a, b){
          return a.length> b.length;
        }).unshift();
}

 getLengthOfShortestElement(['one', 'two', 'three']); // 3

为什么它不通过测试它应该通过仅返回最短元素的第一个实例来“处理关系”。另外,是否有更好的方法使空数组返回0?

javascript arrays sorting elements
6个回答
1
投票

这可以用减速器完成。

function getLengthOfShortestElement(arr) {

    if (!arr.length) return 0;

    return arr.reduce(function(prev, current) {

        if (prev === null) return current.length;
        if (current.length < prev) return current.length;

        return prev;
    }, null);
}

0
投票

它适用于所有情况。

function getLengthOfShortestElement(arr){

    if (arr.length === 0) return 0;

    var shortestLength = arr[0].length;
    arr.forEach(function (each) {
        shortestLength = each.length < shortestLength ? each.length : shortestLength;
    });

    return shortestLength;
}

0
投票

因为Javascript Array.prototype.sort文档clearly states

sort()方法对数组中的元素进行排序并返回数组。排序不一定稳定。

换句话说,不能保证具有相同长度的元素在排序结果中的顺序与原始元素中的顺序相同。

也许更好的方法是绕过可能不稳定的排序并简单地自己处理数组。使用以下伪代码可以轻松完成此操作:

def getFirstShortestElement(array):
    if len(array) == 0:
        return 0
    firstSmall = 0
    for index = 1 to len(array) - 1, inclusive:
        if len(array[index]) < len(array[firstSmall]):
            firstSmall = index
    return array[firstSmall]

顺便说一句,你的功能被错误地命名。它根本不会给你“LengthOfShortestElement”。函数名称应反映它们的作用,如果遵循该规则,您将发现代码更容易维护:-)


0
投票

我不明白你的意思是“为什么它没有通过测试它应该”处理关系“只返回最短元素的第一个实例”。

但是在空数组上返回0,我会这样做:

function getLengthOfShortestElement(arr){
    if (!arr){return 0}
    //rest of your code
}

0
投票

你正在使用unshift,它预先添加一个元素而不是删除它,并且你缺少了length属性。

function getLengthOfShortestElement(arr) {
    if (!arr || !arr.length) {return 0;}
    arr = [].concat(arr); // Prevent altering the source array
    return arr.sort(function (a, b) {
      return a.length > b.length;
    }).shift().length;
}

getLengthOfShortestElement(['one', 'two', 'three']); // 3

对于长数组,如果您遍历数组检查长度,它可能会更快:

function getLengthOfShortestElement(arr) {
    if (!arr || !arr.length) {return 0;}
    var minlength = (""+arr[0]).length;
    for (var i = 1; i < arr.length; i++) {
        var len = (""+arr[i]).length;
        if (len < minlength) {minlength = len;}
    }
    return minlength;
}

0
投票

我认为你可以用reduce方法做到这一点。

 function getLengthOfShortestElement(arr) {
   return arr.length 
   ?  arr.reduce((a, b) => a.length < b.length ? a : b).length
   : 0;
 }
 getLengthOfShortestElement(['one', 'two', 'three']);
© www.soinside.com 2019 - 2024. All rights reserved.