Как мне написать функцию, которая принимает один аргумент, являющийся предложением, и возвращает новое предложение, в котором все слова обращены, но сохраняются в том же порядке, что и исходное предложение?

Прецедент:

WordsReverser («Это весело, надеюсь.»); Вернется:

"sihT si nuf, yllufepoh."

Это то, что я до сих пор, но обратите внимание, что я не могу получить точку и запятую, чтобы остаться на месте. Я не знаю, была ли это опечатка интервьюером или как?

function wordsReverser(str){
  return str.split(' ').
    map(function(item) {    
        return item.split('').reverse().join('');
    }).join(' ');
}

wordsReverser("This is fun, hopefully.");
//Output: 'sihT si ,nuf .yllufepoh'
3
hackermann 16 Дек 2015 в 03:01

5 ответов

Лучший ответ

Попробуйте так:

function wordsReverser(str){
  return str.replace(/[a-zA-Z]+/gm, function(item) {    
        return item.split('').reverse().join('');
    });
}

wordsReverser("This is fun, hopefully.");
//Output: 'sihT si nuf, yllufepoh.'

Как это работает: функция replace() найдет каждое слово и передаст функции, которая обратит слово (функция возвращает обратное слово, которое заменяет слово в строке), и все остальные должно остаться так, как было раньше.

1
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ 16 Дек 2015 в 02:16
function wordsReverser(str){
  return str.split(' ').
    map(function(item) {    
        var letters = item.match(/[a-z]*/i);
    return item.replace(letters[0], letters[0].split('').reverse().join(''));
}).join(' ');

}

 wordsReverser("This is fun, hopefully.");
//Output: 'sihT si nuf, yllufepoh.'

Скорее всего, не дурак

1
chris van hooser 16 Дек 2015 в 00:32

Итак, из того, что я вижу, вы просто переворачиваете строку, точка и запятая связаны со строкой. Я думаю о том, как заставить это работать, захватывая значения Regex, удаляя их с их индексом, а затем вставляя, когда вы закончите с исходным индексом.

Надеюсь это поможет

1
Scott Stern 16 Дек 2015 в 00:42

Алгоритм будет примерно таким:

placeholder_array = [];
  result = '';
  foreach char in inputstring
    if(char !=',' || char != '.'){
         add char to placeholder_array;
    }
    else{
         result = result + reverse of placeholder_array
         placeholder_array = []
    }

   result = result + reverse of placeholder_array

Если это вопрос собеседования, я думаю, что им больше нравится алгоритм, чем точный синтаксис языка.

1
AD.Net 16 Дек 2015 в 00:39
function wordsReverser(str){
  return str.split(/(\s|,|\.)/).
    map(function(item) {    
        return item.split('').reverse().join('');
    }).join('');
}

wordsReverser("This is fun, hopefully.");
// Output: sihT si nuf, yllufepoh.

Regex для извлечения пробелов, запятых и точек.

2
JBux 16 Дек 2015 в 00:36