2016-03-16 43 views
0

我試圖找到下面的測試解決方案: 你應該能夠在列的給定數量的包裝線,在不破壞的話的JavaScript字符串包裹

輸入字符串爲:

var inputStrings = [ 
    'abcdef abcde abc def', 
    'abc abc abc', 
    'a b c def' 
]; 

和輸出應該是:

var outputStrings = [ 
    'abcdef\nabcde\nabc\ndef', 
    'abc\nabc\nabc', 
    'a b c\ndef' 
]; 

我想出了這樣的jsfiddle是通過2出3個測試: https://jsfiddle.net/ticuclaudiu/yh269rc0/5/

function wordWrap(str, cols) { 
    var formatedString = '', 
     wordsArray = []; 


    wordsArray = str.split(' '); 

    for(var i = 0; i < wordsArray.length; i++) { 

    if(wordsArray.indexOf(wordsArray[i]) === 0) { 
     formatedString += wordsArray[i]; 
    } else { 
     if(wordsArray[i].length > 1) { 
      formatedString += '/n' + wordsArray[i]; 
     } else { 
      formatedString +=' ' + wordsArray[i]; 
     } 
    } 
    } 

    console.log(formatedString); 
} 

//wordWrap('abcdef abcde abc def', 5); 
wordWrap('abc abc abc', 5); 
//wordWrap('a b c def', 5); 

//'abcdef abcde abc def' |  'abcdef\nabcde\nabc\ndef', 
//'abc abc abc'      |  'abc\nabc\nabc',   
//'a b c def'       |  'a b c\ndef' 

但我不能找出如何通過第二個( 'ABC ABC ABC');

它必須是純粹的JavaScript。

任何指針?

謝謝。

+0

爲什麼沒有第三個項目\ n適用於所有空間? – gurvinder372

+0

請在問題**中顯示代碼** ...將其置於jsfiddle中是不可接受的 – freefaller

+1

另外,如果這是一項測試,爲什麼要求我們爲您做這件事?當然,測試的目的是證明你可以自己做點什麼? – freefaller

回答

1

的答案似乎是:

function wordWrap(str, cols) { 
    var formatedString = '', 
     wordsArray = []; 


    wordsArray = str.split(' '); 

    formatedString = wordsArray[0]; 

    for (var i = 1; i < wordsArray.length; i++) { 
     if (wordsArray[i].length > cols) { 
      formatedString += '\n' + wordsArray[i]; 
     } else { 
      if (formatedString.length + wordsArray[i].length > cols) { 
       formatedString += '\n' + wordsArray[i]; 
      } else { 
       formatedString += ' ' + wordsArray[i]; 
      } 
     } 
    } 

    console.log(formatedString); 
} 

wordWrap('abcdef abcde abc def', 5); 
wordWrap('abc abc abc', 5); 
wordWrap('a b c def', 5); 

你可以看到的jsfiddle這裏https://jsfiddle.net/ticuclaudiu/yh269rc0/13/

0

,你可以嘗試用正則表達式做這樣

var input = [ 
    'abcdef abcde abc def', 
    'abc abc abc', 
    'a b c def' 
]; 
var output = input.map(function(val){ 
     return val.replace(/(^|[ ])[^ ]{2,}([ ]|$)/g,function(val2){ 
      return val2.replace(' ','\\n') 
     }) 
}) 
console.log(output) // ["abcdef\nabcde\nabc\ndef", "abc\nabc\nabc", "a b c def"] 
+0

不好,它沒有通過第三次測試。 –

+0

我改變正則表達式,它現在應該工作 – Zamboney

+0

現在它在測試1失敗。但我設法找到一個解決方案。 我會在解決方案下面添加一條評論。感謝您的努力。 –

相關問題