Как вы переворачиваете строку в JavaScript? - PullRequest
393 голосов
/ 06 июня 2009

Как вы переворачиваете строку на месте (или на месте) в JavaScript при передаче функции с оператором return? Все без использования встроенных функций? .reverse(), .charAt() и т. Д.

Ответы [ 44 ]

0 голосов
/ 14 февраля 2014
function reverse(str){
var s = "";
for (var i = str.length - 1; i >= 0; i--){
    s += str[i];
}
return s;
};
reverse("your string comes here")
0 голосов
/ 12 августа 2014

Ниже может помочь любой, кто хочет рекурсивно перевернуть строку. Попросили сделать это на недавнем собеседовании, используя стиль функционального программирования:

var reverseStr = function(str) {
    return (str.length > 0) ? str[str.length - 1] + reverseStr(str.substr(0, str.length -   1)) : '';
};

//tests
console.log(reverseStr('setab retsam')); //master bates
0 голосов
/ 28 декабря 2017
var reverseString = function(str){ 
  let length = str.length - 1;
  str = str.split('');

  for(let i=0;i<= length;i++){
    str[length + i + 1] = str[length - i];
  }

  return str.splice(length + 1).join('');
}
0 голосов
/ 18 июня 2011
var str = "IAMA JavaScript Developer";
var a=str.split(''), b = a.length;
for (var i=0; i<b; i++) {
    a.unshift(a.splice(1+i,1).shift())
}
a.shift();
alert(a.join(''));
0 голосов
/ 19 сентября 2017
<body>
        <label>Enter any string: </label>
        <input type="text" name="str" id="str"><br><br>
        <button value = "Reverse" onclick=myFunction()>Reverse</button><br>
        <p id="result"></p>
        <script>
            function myFunction(){
                var str1 = document.getElementById("str").value;
// Step 1. take value from text box and stored it into a new variable str1.
// Step 2. Use the split() method to return a new array.
 // Step 3. Use the reverse() method to reverse the new created array
// Step 4. Use the join() method to join all elements of the array into a string
                var res = str1.split("").reverse().join("");
                document.getElementById("result").innerHTML = res;
            }   
        </script>
    </body>
0 голосов
/ 05 июля 2017

Примерно так должно быть сделано, следуя лучшим практикам:

(function(){
	'use strict';
	var str = "testing";
	
	//using array methods
	var arr = new Array();
	arr = str.split("");
	arr.reverse();
	console.log(arr);
	
	//using custom methods
	var reverseString = function(str){
		
		if(str == null || str == undefined || str.length == 0 ){
			return "";
		}
		
		if(str.length == 1){
			return str;
		}
		
		var rev = [];
		for(var i = 0; i < str.length; i++){
			rev[i] = str[str.length - 1 - i];
		}
		return rev;
	} 
	
	console.log(reverseString(str));
	
})();
0 голосов
/ 12 июня 2015

Вот основной неизменный пример ES6 без использования Array.prototype.reverse:

// :: reverse = String -> String
const reverse = s => [].reduceRight.call(s, (a, b) => a + b)

console.log(reverse('foo')) // => 'oof'
console.log(reverse('bar')) // => 'rab'
console.log(reverse('foo-bar')) // => 'rab-oof'
0 голосов
/ 03 октября 2015

Добавление в прототип String идеально (на случай, если его добавят в основной язык JS), но сначала нужно проверить, существует ли он, и добавить его, если он не существует, например:

String.prototype.reverse = String.prototype.reverse || function () {
    return this.split('').reverse().join('');
};
0 голосов
/ 06 июня 2009

Вы можете попробовать что-то вроде этого. Я уверен, что есть место для рефакторинга. Я не мог обойти, используя функцию разделения. Может быть, кто-то знает способ сделать это без разделения.

Код для настройки, можете поместить его в вашу библиотеку .js

Код для его использования (имеет код на стороне клиента, только потому что он был протестирован в браузере):

var sentence = "My Stack is Overflowing."
document.write(sentence.reverseLetters() + '<br />');
document.write(sentence.reverseWords() + '<br />');

Отрывок:

String.prototype.aggregate = function(vals, aggregateFunction) {

  var temp = '';
  for (var i = vals.length - 1; i >= 0; i--) {
    temp = aggregateFunction(vals[i], temp);
  }
  return temp;
}

String.prototype.reverseLetters = function() {
  return this.aggregate(this.split(''),
    function(current, word) {
      return word + current;
    })
}

String.prototype.reverseWords = function() {
  return this.aggregate(this.split(' '),
    function(current, word) {
      return word + ' ' + current;
    })
}

var sentence = "My Stack is Overflowing."
document.write(sentence.reverseLetters() + '<br />');
document.write(sentence.reverseWords() + '<br />');
0 голосов
/ 27 января 2016

Невозможно повернуть строку на место , но это можно сделать не на месте.

...