2017-04-06 32 views
1

我試圖解決以下問題,沒有任何功能編程。如果元素的長度相同,如何找到第一個實例?

問題:編寫一個叫做findShortestWordAmongMixedElements()的函數。

給定一個數組,findShortestWordAmongMixedElements()返回給定數組中的最短字符串。

注:

  • 如果有關係,它應該返回的第一個元素出現在給定數組英寸

  • 期望給定數組的值不是字符串。

  • 如果給定的數組是空的,它應該返回一個空字符串。

  • 如果給定的數組不包含字符串,它應該返回一個空字符串。

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

這就是我的答案至今:

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; 
} 

沒有在第2個功能打印出來。我的indexOf不正確?

+1

你遇到了什麼問題? –

+0

'如果有關係,它應該返回出現在給定數組中的第一個元素'。因此,比較字符串時,如果比較字符串的長度較短,則只替換當前字符串。如果是平局,不要做交換。我看不出混亂在哪裏。如果您發佈的代碼存在問題,請解釋問題並提出問題。 – csmckelvey

+0

'else'子句看起來確實可疑。嘗試添加一個布爾變量「找到字符串」。你正在嘗試使用'shortestString'作爲最短字符串的值和表示在數組中遇到字符串的布爾值。 – traktor53

回答

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

我試圖做到這一點,而不使用過濾器也不減少。 – Rod

+0

可能你應該在問題中提及它。 –

相關問題