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

时间:2016-10-27 01:30:22

标签: javascript arrays sorting elements

编写一个名为“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?

6 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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”。函数名称应反映它们的作用,如果遵循该规则,您将发现代码更容易维护: - )

答案 2 :(得分: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;
}

答案 3 :(得分:0)

我不理解你的意思&#34;为什么它没有通过测试它应该&#34;处理关系&#34;只返回最短元素的第一个实例&#34;。

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

make sourceFile clean-all

答案 4 :(得分: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;
}

答案 5 :(得分:0)

我认为您可以使用reduce方法来做到这一点。

 function getLengthOfShortestElement(arr) {
   return arr.length 
   ?  arr.reduce((a, b) => a.length < b.length ? a : b).length
   : 0;
 }
 getLengthOfShortestElement(['one', 'two', 'three']);