反向字符串就地使用JavaScript中的for循环

时间:2017-04-27 09:55:31

标签: javascript string reverse

var n =" reversestrings",k = 3;

想要在' k',

的块中反转字符串

答案是:ver sre tse nir gs;

如果最后一个字少于' k'然后不需要逆转。

我正在使用下面的代码,但没有得到预期的答案。

var n = 'stringreverses', k = 3, str = '', s = '';
    var c = 0;
    for( var i=0; i<n.length; i++ ){
        if( c<k ){
            c++
            str += n[i];
            s=str.split('').reverse().join('');
        }
        else{
            console.log("-" + s);
            c=0;
        }
    }

5 个答案:

答案 0 :(得分:1)

首先我们需要将输入拆分为具有相同大小的块(最后一个可以更小),然后我们反转每个块并在最后连接。

var input = "123456",
    chunks = input.match(new RegExp('.{1,' + k + '}', 'g'));

var result = chunks.map(function(chunk) {
    return chunk.split('').reverse().join(''); 
}).join('');

答案 1 :(得分:0)

是否完成家庭作业,这是一个很好的用例,以字符串开头。

这是一种C方法,但你在Javascript中有更多。

实际上你想要通过chunk反转来处理chunk。如何创建一大块字符串?一种方法是使用切片https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/String/slice

var str = "abcdef";
console.log(str.slice(0,2));

因此,您可以轻松地将字符串切成块。

然后你必须迭代它,没有好办法实际上有十几个,但你可以从后面到字符串的开头做:

for( i=str.length ; i>0 ; i -= k ){
    // i will go from the end of your str to
    // the beginning by step of k(=3) and you can use i - k and i 
    // to slice your string (as we see it before)
    // you have to take care of the last part that could be less than 
    // 3
}

然后你必须格式化结果,最简单的方法是将结果连接成一个字符串:

var strRes = "";
strRes += "res 1";
strRes += "res 2";
console.log(strRes); // should screen "res 1res 2"

由于这是家庭作业,我不会成为一个小伙伴,你在这里有所有的碎片,这取决于你构建这个难题。

希望得到帮助

答案 2 :(得分:0)

我喜欢@Jozef的approch,但对于那些不太喜欢Regex的人来说,这里也是我的 -

//Taking care of Tail Calling
function reverStrInChunk(str, k, r=''){
 let index=0, revStr,
 res = str.substring(index, k), remStr;
 
 revStr = res.split("").reverse().join("");
 
remStr = str.substring(k, str.length);

r = r + revStr; 


if(remStr.length>k){ 
 
 return reverStrInChunk(remStr,k, r+" ");
 }
else if(remStr.length<k) {

return r +" "+remStr;
}else{

  return r +" "+ remStr.split("").reverse().join("");
}
}

var aStr = reverStrInChunk('reversestrings',3);//ver sre tse nir gs

console.log(aStr);

答案 3 :(得分:0)

$(function() {
	var n = 'reversestrings', k = 3;
    var revString = "";
    for (var i =0; i<=n.length; i++) {
		if (i%k == 0) {
			 l = parseInt(k) + parseInt(i);
			 var strChunk = n.substring(i,l);
			 var innerStr = "";
			 for (var j =0; j<strChunk.length; j++) {
				 var opp = parseInt(strChunk.length) - parseInt(j) - 1;
				 innerStr = innerStr + strChunk.charAt(opp);
			}
			revString = revString + " "+innerStr;
		}
	}
    alert(revString);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>

答案 4 :(得分:0)

我对此的看法。纯JS甚至没有内置函数:

    function reverseSubStr(str) {
      var right = str.length - 1, reversedSubStr = '';
      while(right >= 0) {
        reversedSubStr += str[right];
        right--;  
      }
      return reversedSubStr;
    }

    function reverseStr(str) {
      var initialStr = str, newstr = '', k = 3, substr = ''
      for(var i = 1; i <= initialStr.length; i++) {
        substr += initialStr[i - 1]; // form a substring
        if(i % k == 0) { // once there are 3 symbols - reverse the substring
          newstr += reverseSubStr(substr) + " "; // ... and add space
          substr = ''; // then clean temp var
        }
      }
      return newstr += substr; // add the remainder of the string - 'gs' - and return the result
    }
  var str = 'reversestrings';
  console.log(reverseStr(str)); //ver sre tse nir gs