2016-03-16 42 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失败。但我设法找到一个解决方案。 我会在解决方案下面添加一条评论。感谢您的努力。 –

相关问题