2016-06-09 2 views
0

я строка в следующем формате:Как объединить числа внутри строки в javascript?

a 582 320 b 15.33 320 15.33 c 148.66 320 148.66 

И мне нужны все цифры, чтобы быть целыми числами, а именно:

a 582 320 b 15 320 15 c 149 320 149 

Я думал, чтобы разбить строку на пространстве, parseFloat() затем Math.Round() с try на каждом элементе, затем снова создайте строку.

Любые лучшие/более простые способы сделать это?

+0

Ваша идея звучит как путь. Насколько я знаю, нет ярлыка RoundNumbersInString(), по праву. – Moulde

+0

Одна из проблем заключается в том, что 'parseFloat()' не будет генерировать исключение, вместо этого он просто вернет «NaN». Поэтому вы должны использовать 'isNaN()', чтобы проверить, что вход может быть переведен как число или нет. – ntalbs

ответ

0

Вы можете использовать регулярное выражение и обратный вызов для округления.

console.log('a 15.33 320 15.33 c 148.66 148.66 999.999'.replace(/\d*\.\d*/g, function (v) { 
 
    return Math.round(v); 
 
}));

+0

Это было именно то, идея, которую я имел сразу после публикации, я изучал этот путь. :) – zamarov

0

Может быть даже (длинный) один вкладышем :-)

yourstring = yourstring.split(" ").map(function(el) {var p=parseFloat(el);return isNaN(p)?el:Math.round(p)}).join(" ") 
+1

Вы можете сделать это короче с ES6 'yourstring = yourstring.split (" ") .map (e => parseFloat (e)? Math.round (e): e) .join (" ")' – Kruga

0
function roundNumbersInString(str) { 
    return str.replace(/\w\S*/g, function (txt) { 
     return (/^[0-9.]+$/.test(txt)) ? Math.round(txt) : txt; 
    }); 
} 
console.log(roundNumbersInString("a 582 320 b 15.33 320 15.33 c 148.66 320 148.66")); 

// "а 582 320 б 15 320 15 с 149 320 149"

+0

Теперь вы можете chcek. в строке комментариев была ошибка. –

0

Это, как я хотел бы сделать эту работу.

var str = "a 582 320 b 15.33 320 15.33 c 148.66 320 148.66", 
 
rndStr = str.split(" ").map(e => Math.round(+e) || e).join(" "); 
 
console.log(rndStr);

Смежные вопросы