2017-08-05 21 views
0

我在JS中創建了一個返回數組中最小字符串的程序函數。但是,我總是得到一個錯誤返回。查找數組中最短的字符串

這裏是我的代碼:

function findShortestWordAmongMixedElements(arr) { 

    let shortest = ''; 

     if(arr.length > 0){ 
     for(let i = 0; i < arr.length; i++){ 
      if(typeof arr[i] === 'string' && arr[i].length < shortest.length) 
      { 
       shortest = arr[i]; 
      } 
      } 
     } 
     } 
     return shortest; 
    } 

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

任何想法,我做錯了,爲什麼我的代碼將無法正常工作?

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

+0

想不出一個字符串的長度比一個空字符串較小的 –

+0

你能否讓我知道我哪裏錯了?任何人都可以修復我的代碼,以便我可以查看它。 –

+0

'let short ='';'因此它是最小的。這個變量似乎是不正確初始化 – Dalorzo

回答

2

您有幾個錯誤。你寫錯了地方的回報。而你發現短字符串邏輯是錯誤的。以最短的無限大,然後檢查較小長度的字符串。

function findShortestWordAmongMixedElements(arr) { 
 
    let shortLength = Infinity; 
 
    let shortest = ""; 
 

 
    if (arr.length > 0) { 
 
     for (let i = 0; i < arr.length; i++) { 
 
      if (typeof arr[i] === 'string' && arr[i].length < shortLength) { 
 
       shortest = arr[i]; 
 
       shortLength = arr[i].length; 
 
      } 
 
     } 
 
    } 
 

 
    return shortest; 
 
} 
 

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

+0

無窮是什麼意思?它有什麼作用? –

+0

https://developer.mozilla。org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity –

+0

@JamesHedegon先假設無限是最大可能的短,然後與其他人比較。 –

2

這裏有一個更好的實現你的邏輯。我們可以過濾出字符串數組並根據字符串長度對其進行排序並返回第一個元素。

function findShortestWordAmongMixedElements(arr) { 
 
    let strings = arr.filter(x => typeof x === "string") 
 
    .sort((a, b) => a.length - b.length); 
 
    
 
    // arr.filter gives you elements which are only strings 
 
    // arr.sort returns you elements according to their string lengths. Then you'll just have to return the first element (because it is already smallest) 
 
    
 
    return strings[0]; 
 
} 
 

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

+0

看起來像OP是初學者級別,並考慮糾正他的代碼,而不是傾銷工作代碼。值得一提的是,OP應該知道ES6來理解這一點。 –

+0

@ꜱᴜʀᴇꜱʜᴀᴛᴛᴀ您的回答在我回答時已經涵蓋了。我認爲用不同的方法提供更多的價值:) – mehulmpt

1

本質上有兩個錯誤:

  1. return語句是函數定義之外。

  2. 正如其他人在評論中提到的那樣,您正在將變量shortest初始化爲'',以防止它獲得新的價值。

function findShortestWordAmongMixedElements(arr) { 
 

 
    let shortest = undefined; 
 

 
    if (arr.length > 0) { 
 
    for (let i = 0; i < arr.length; i++) { 
 
     if (typeof arr[i] === 'string' && (shortest == undefined ||arr[i].length < shortest.length)) { 
 
     shortest = arr[i]; 
 
     } 
 
    } 
 
    } 
 

 
    return shortest; 
 
} 
 

 

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

1

我認爲這應該工作

function findShortestWordAmongMixedElements(arr) { 

    let shortest = null; 

    if(arr.length > 0){ 
     for(let i = 0; i < arr.length; i++){ 
      if(typeof arr[i] === 'string'){ 
       if(shortest == null) 
        shortest = arr[i]; 
       else if(arr[i].length < shortest.length){ 
        shortest = arr[i]; 
       } 
      } 
     } 
    } 
    return shortest; 
} 
var output = findShortestWordAmongMixedElements([4, 'two', 2, 'three']); 
console.log(output); // --> 'two' 
0

這是你的函數,它會發現最小的字符串:

function findShortestWordAmongMixedElements(arr) { 
 

 
    let shortest = ''; 
 

 
     if(arr.length > 0){ 
 
     for(let i = 0; i < arr.length; i++){ 
 
      if(typeof arr[i] === 'string') 
 
      { 
 
       if(shortest.length == 0) { 
 
        shortest = arr[i]; continue; 
 
       } 
 
       
 
       if(arr[i].length < shortest.length){ 
 
        shortest = arr[i]; 
 
       } 
 
       
 
      } 
 
      } 
 
     } 
 
      return shortest; 
 

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

0

,如果你篩選出數組,然後減少它,它可能是更容易:

function findShortestWordAmongMixedElements(arr) { 
 
    return arr.filter(el => typeof el === 'string') 
 
    .reduce((sht, str) => str.length < sht.length ? str : sht); 
 
} 
 

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

相關問題