如果元素的长度相同,我如何找到第一个实例?

时间:2017-04-06 20:48:04

标签: javascript arrays algorithm

我试图在没有任何函数式编程的情况下解决以下问题。

问题:编写一个名为findShortestWordAmongMixedElements()的函数。

给定一个数组,findShortestWordAmongMixedElements()返回给定数组中的最短字符串。

注意:

  • 如果有联系,它应该返回第一个出现在给定数组中的元素。

  • 期望给定数组的值不是字符串。

  • 如果给定的数组为空,则应返回空字符串。

  • 如果给定的数组不包含任何字符串,则应返回空字符串。

  

var output = findShortestWordAmongMixedElements([4,' two',2,' three']);   的console.log(输出); // - > ' 2'

这是我到目前为止的答案:

function findShortestWordAmongMixedElements(arr) {
  // your code here
  var shortestString = '';
  if (arr.length > 0) {
    for (var i = 0; i < arr.length; i += 1) {
      if (typeof arr[i] === 'string' ) {
        var length = arr[i].length;
        if (arr[i].length < shortestString.length) {
          shortestString = arr[i];
        } else {
          shortestString = arr[length.indexOf(arr[i].length)];
        }
      }
    }
  }
  return shortestString;
}

或者我应该这样做:

function findShortestWordAmongMixedElements(arr) {
  // your code here
  var shortestString = '';
  if (arr.length > 0) {
    for (var i = 0; i < arr.length; i += 1) {
      if (typeof arr[i] === 'string' ) {
        var length = arr[i].length;
        if (arr[i].length < shortestString.length) {
          shortestString = arr[i];
        } 
        if (arr[i].length === shortestString.length) {
          shortestString = arr[length.indexOf(arr[i].length)];
        }
      }
    }
  }
  return shortestString;
}

第二个功能中没有打印出来。我的indexOf不正确吗?

1 个答案:

答案 0 :(得分:0)

function findShortestWordAmongMixedElements (arr) {
  return arr.filter(d => typeof d == 'string').sort(d => -d.length)[0] || ''
}