JavaScript costeleta / fatia / aparar último caractere na seqüência
-
11-09-2019 - |
Pergunta
Eu tenho uma string, 12345.00
, e eu gostaria que ele retorne 12345.0
.
Eu olhei trim
, mas parece que é só aparar espaço em branco e slice
que eu não vejo como isso funcionaria. Alguma sugestão?
Solução
Você pode usar o substring função:
var str = "12345.00";
str = str.substring(0, str.length - 1); // "12345.0"
Esta é a resposta aceita, mas de acordo com as conversas abaixo, o fatia sintaxe é muito mais clara:
var str = "12345.00";
str = str.slice(0, -1); // "12345.0"
Outras dicas
Você pode usar fatia ! Você apenas tem que certificar-se de que você sabe como usá-lo. #s positivos são em relação ao início, os números negativos são em relação ao final.
js>"12345.00".slice(0,-1)
12345.0
Você pode usar o href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/substring" rel="noreferrer"> substring método de objetos string JavaScript :
s = s.substring(0, s.length - 4)
Ele incondicionalmente remove os últimos quatro caracteres a partir s
string.
No entanto, se você quiser condicionalmente remover os últimos quatro caracteres, somente se eles são exatamente _bar
:
var re = /_bar$/;
s.replace(re, "");
O método mais simples é utilizar o método slice
da cadeia, o que permite que as posições negativas (correspondente a deslocamentos a partir do fim da cadeia):
var s = "your string";
var withoutLastFourChars = s.slice(0, -4);
Se você precisava de algo mais geral para remover tudo após (e incluindo) o último sublinhado, você pode fazer o seguinte (desde que s
é garantido para conter pelo menos um sublinhado):
var s = "your_string";
var withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
// withoutLastChunk == "your"
Para um número como o seu exemplo, eu recomendaria fazer isso substring
sobre: ??
alert(parseFloat('12345.00').toFixed(1)); // 12345.0
Note que isso vai realmente em volta do número, no entanto, que eu imagino é desejado, mas talvez não:
alert(parseFloat('12345.46').toFixed(1)); // 12345.5
Usando a função fatia de JavaScript:
var string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here
Isto poderia ser usado para remover '_bar' na extremidade de uma corda, de qualquer comprimento.
Uma expressão regular é o que você está procurando:
var str = "foo_bar";
alert(str.replace(/_bar$/, ""));
Como sobre: ??
var myString = "12345.00";
myString.substring(0, myString.length - 1);
"a string".match(/(.*).$/)[1] // => a strin
"a string".match(/(.*).$/) // returns ["a string", "a strin"]
"a string".match(/(.*).{2}$/)[1] // to get two chars off => a stri
- (. *), Captura quaisquer caracteres várias vezes
- ., Corresponde último caractere, neste caso
- $, corresponde ao fim da cadeia
Use regex:
var aStr = "12345.00";
aStr = aStr.replace(/.$/, '');
Tente isto:
var myString = "Hello World!";
myString.slice(0, -1);
Aqui é uma alternativa que eu não acho que eu já vi em outras respostas, apenas por diversão.
var strArr = "hello i'm a string".split("");
strArr.pop();
document.write(strArr.join(""));
Não é tão legível ou simples como fatia ou substring mas permite que você jogue com a string usando alguns métodos de matriz agradáveis, por isso vale a pena conhecer.
var str = "test!";
var newStr = str.slice(0,-1); //test
debris = string.split("_") //explode string into array of strings indexed by "_"
debris.pop(); //pop last element off the array (which you didn't want)
result = debris.join("_"); //fuse the remainng items together like the sun
Se você quer fazer o arredondamento genérico de carros alegóricos, em vez de apenas aparar o último caractere:
var float1 = 12345.00,
float2 = 12345.4567,
float3 = 12345.982;
var MoreMath = {
/**
* Rounds a value to the specified number of decimals
* @param float value The value to be rounded
* @param int nrDecimals The number of decimals to round value to
* @return float value rounded to nrDecimals decimals
*/
round: function (value, nrDecimals) {
var x = nrDecimals > 0 ? 10 * parseInt(nrDecimals, 10) : 1;
return Math.round(value * x) / x;
}
}
MoreMath.round(float1, 1) => 12345.0
MoreMath.round(float2, 1) => 12345.5
MoreMath.round(float3, 1) => 12346.0
EDIT: Parece que existe um construído em função para isso, como Paolo ressalta. Essa solução é, obviamente, muito mais limpo do que o meu. Use parseFloat seguido de toFixed
if(str.substring(str.length - 4) == "_bar")
{
str = str.substring(0, str.length - 4);
}
https://jsfiddle.net/invos/w3zeqv6v/
Apenas uso guarnição se você não quiser espaços
"11.01 °C".slice(0,-2).trim()
Nos casos em que você deseja remover algo que é perto da extremidade de uma corda (no caso de strings de tamanho variável) você pode combinar slice () e substr ().
Eu tinha uma corda com marcação, construído de forma dinâmica, com uma lista de marcas de âncora, separados por vírgulas. A corda era algo como:
var str = "<a>text 1,</a><a>text 2,</a><a>text 2.3,</a><a>text abc,</a>";
Para remover a última vírgula eu fiz o seguinte:
str = str.slice(0, -5) + str.substr(-4);
@ Jason S:
Você pode usar fatia! Você só tem de Verifique se você sabe como usá-lo. #s positivos são em relação ao a começar, são números negativos em relação ao final.
js> "12.345,00" .slice (0, -1) 12.345,0
Sorry for my graphomany mas mensagem foi marcado 'jquery' mais cedo. Então, você não pode usar slice () dentro jQuery porque slice () é o método jQuery para operações com elementos DOM, não substrings ... Em outra resposta palavras @ Jon Erickson sugerem solução realmente perfeito.
No entanto, o seu método de vontade funciona da função jQuery, dentro simples Javascript. Necessidade de dizer, devido à última discussão nos comentários, que jQuery é muito mais frequentemente renovável extensão da JS do que o seu próprio pai mais conhecido ECMAScript.
Aqui também existem dois métodos:
como o nosso:
string.substring(from,to)
como mais se 'para' index retorna nulled o resto da string. assim:
string.substring(from)
positivo ou negativo ...
e alguns outros - substr () - que fornecem gama de substring e 'tamanho' só pode ser positivo:
string.substr(start,length)
Além disso, alguns mantenedores sugerem que string.substr(start,length)
último método não funciona ou trabalhar com o erro para MSIE.
Tente isto:
<script>
var x="foo_foo_foo_bar";
for (var i=0; i<=x.length; i++) {
if (x[i]=="_" && x[i+1]=="b") {
break;
}
else {
document.write(x[i]);
}
}
</script>
Você também pode tentar o exemplo de trabalho ao vivo em http://jsfiddle.net/informativejavascript/F7WTn / 87 / .
Use substring para ter tudo à esquerda de _bar. Mas primeiro você tem que obter o instr da _bar na string:
str.substring(3, 7);
3 é que o início e 7 é o comprimento.