Задать вопрос
@sinister1827

Как сортировать слова в строке в зависимости от содержащихся внутри них цифр?

Помогите написать функцию которая сортирует ленту. Каждое число в ленте будет содержать какую-то цифру. Эта цифра и будет означать позицию которую слово займет в итоге.

Уточнение: Цифры могут быть от 1 до 9. 1 будет первым словом (не 0). Если лента пуста - вернуть пустую ленту. Слова в входной ленте будут содержать только валидные значения.
Пример: sortString('g5et ski3lls on6 use1 your2 to4 7top').
Результат: 'use1 your2 ski3lls to4 g5et on6 7top'.

Вот что я пробовал:

sortString = function(Str){
		Str = Str.split(",");
	    var arr = ["1","2","3","4","5","6","7","8","9"];
        for(var n = 0; n < Str.length; n++){
        	for (var i =  0;  i < arr.length; i++) {
        	  if(Str.includes(arr[i])){
                  Str[n] = Str[i+1];
        	  }
        	}
        	
        }
    Str = Str.join();
    console.log(Str);
}


sortString("gonna2 Yo1u me4 tu3ch");
  • Вопрос задан
  • 292 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const sortString = str => str
  .split(' ')
  .map(n => [ n, +/\d/.exec(n) ])
  .sort((a, b) => a[1] - b[1])
  .map(n => n[0])
  .join(' ');

или

const sortString = str => Array
  .from({ length: 9 }, (n, i) => str.match(RegExp(`\\w*${i + 1}\\w*`)))
  .filter(Boolean)
  .join(' ');

или

const sortString = str => str && str
  .match(/\S+/g)
  .reduce((acc, n) => (acc[n.replace(/\D/g, '')] = n, acc), [])
  .reduce((acc, n) => acc + (acc && ' ') + n, '');
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Shimmu
<?php
function sortString($str) {
if ($str != null) {
$arr = explode(" ", $str);
$arr2 = array();
foreach ($arr as $key => $value) {
preg_match('/[0-9]/', $value, $matches);
$arr2[$matches[0]] = $value;
}

ksort($arr2);
$newStr = implode(" ", $arr2);
return $newStr;
} else {
return "";
}
}

$str = "g5et ski3lls on6 use1 your2 to4 7top";
$res = sortString($str);
echo $res;
?>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы