Eu tenho uma string 12345.00
e gostaria que ela retornasse 12345.0
.
Eu olhei trim
, mas parece que está apenas aparando espaços em branco e slice
que não vejo como isso funcionaria. Alguma sugestão?
Math.round('0.5') === 1
;)
Eu tenho uma string 12345.00
e gostaria que ela retornasse 12345.0
.
Eu olhei trim
, mas parece que está apenas aparando espaços em branco e slice
que não vejo como isso funcionaria. Alguma sugestão?
Math.round('0.5') === 1
;)
Respostas:
Você pode usar a função de substring :
let str = "12345.00";
str = str.substring(0, str.length - 1);
console.log(str);
Esta é a resposta aceita, mas de acordo com as conversas abaixo, a sintaxe da fatia é muito mais clara:
let str = "12345.00";
str = str.slice(0, -1);
console.log(str);
str = str.substring(0, str.length -1);
slice
& substring
são todos iguais; excepto a que o slice()
aceita um índice negativo, em relação ao fim da cadeia, mas não o substring
, ele gera out-of-bound
erro
substring
é 11% mais rápido que slice
. jsperf.com/js-slice-vs-substring-test
Você pode usar fatia ! Você só precisa ter certeza de que sabe usá-lo. # Positivos são relativos ao início, números negativos são relativos ao final.
js>"12345.00".slice(0,-1)
12345.0
substring
método também não poderia ser usado em seqüências dinâmicas? Usando o str.length para obter dinamicamente o comprimento?
Você pode usar o método de substring dos objetos de sequência JavaScript:
s = s.substring(0, s.length - 4)
Remove incondicionalmente os últimos quatro caracteres da string s
.
No entanto, se você deseja remover condicionalmente os quatro últimos caracteres, apenas se eles forem exatamente _bar
:
var re = /_bar$/;
s.replace(re, "");
slice
é melhor aqui. s.slice(0, -4)
O método mais fácil é usar o slice
método da string, que permite posições negativas (correspondentes a compensações do final da string):
const s = "your string";
const withoutLastFourChars = s.slice(0, -4);
Se você precisar de algo mais geral para remover tudo após (e incluindo) o último sublinhado, faça o seguinte (desde que s
seja garantido que contenha pelo menos um sublinhado):
const s = "your_string";
const withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
console.log(withoutLastChunk);
Para um número como o seu exemplo, eu recomendo fazer isso substring
:
console.log(parseFloat('12345.00').toFixed(1));
Observe que, na verdade, isso arredondará o número, o que eu imagino ser desejado, mas talvez não:
console.log(parseFloat('12345.46').toFixed(1));
Usando a função de fatia do JavaScript:
let string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here
console.log(string);
Isso pode ser usado para remover '_bar' no final de uma string, de qualquer tamanho.
Uma expressão regular é o que você está procurando:
let str = "foo_bar";
console.log(str.replace(/_bar$/, ""));
Tente o seguinte:
const myString = "Hello World!";
console.log(myString.slice(0, -1));
E se:
let myString = "12345.00";
console.log(myString.substring(0, myString.length - 1));
Use regex:
let aStr = "12345.00";
aStr = aStr.replace(/.$/, '');
console.log(aStr);
console.log("a string".match(/(.*).$/)[1]);
console.log("a string".match(/(.*).$/));
console.log("a string".match(/(.*).{2}$/)[1]);
const str = "test!";
console.log(str.slice(0, -1));
Aqui está uma alternativa que eu acho que não vi nas 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ê brinque com a corda usando alguns métodos de matriz, portanto vale a pena conhecer.
Se você deseja fazer arredondamentos genéricos de flutuadores, 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 uma função interna para isso, como Paolo aponta. Essa solução é obviamente muito mais limpa que a minha. Use parseFloat seguido por toFixed
if(str.substring(str.length - 4) == "_bar")
{
str = str.substring(0, str.length - 4);
}
https://jsfiddle.net/invos/w3zeqv6v/
/programming/34817546/javascript-how-to-delete-last-two-characters-in-a-string
Basta usar aparar se você não quiser espaços
"11.01 °C".slice(0,-2).trim()
Hoje 2020.05.13 realizo testes de soluções escolhidas no Chrome v81.0, Safari v13.1 e Firefox v76.0 no MacOs High Sierra v10.13.6.
slice(0,-1)
(D) é a solução mais rápida ou mais rápida para seqüências curtas e longas e é recomendado como solução rápida entre navegadoressubstring
(C) e substr
(E) são rápidasRealizo dois testes para as soluções A , B , C , D , E ( ext ), F , G (minha)
As soluções são apresentadas no snippet abaixo
Aqui estão exemplos de resultados para o Chrome para cadeias curtas
String.prototype.{ split, slice, substr, substring }
opera em cadeias codificadas UTF-16Nenhuma das respostas anteriores reconhece o Unicode. As cadeias de caracteres são codificadas como UTF-16 na maioria dos mecanismos JavaScript modernos, mas os pontos de código Unicode mais altos requerem pares substitutos ; portanto, métodos de cadeia pré-existentes mais antigos operam em unidades de código UTF-16, e não em pontos de código Unicode.
const string = "ẞ🦊";
console.log(string.slice(0, -1)); // "ẞ\ud83e"
console.log(string.substr(0, string.length - 1)); // "ẞ\ud83e"
console.log(string.substring(0, string.length - 1)); // "ẞ\ud83e"
console.log(string.replace(/.$/, "")); // "ẞ\ud83e"
console.log(string.match(/(.*).$/)[1]); // "ẞ\ud83e"
const utf16Chars = string.split("");
utf16Chars.pop();
console.log(utf16Chars.join("")); // "ẞ\ud83e"
Além disso, as respostas RegExp não correspondem a quebras de linha no final em sua forma atual:
const string = "Hello, world!\n";
console.log(string.replace(/.$/, "").endsWith("\n")); // true
console.log(string.match(/(.*).$/) === null); // true
O código compatível com Unicode utiliza o iterador da string; ver Array.from
e ...
espalhar .
string[Symbol.iterator]
também pode ser usado (por exemplo, em vez de string
).
Consulte também Como dividir a cadeia Unicode em caracteres em JavaScript .
Exemplos:
const string = "ẞ🦊";
console.log(Array.from(string).slice(0, -1).join("")); // "ẞ"
console.log([
...string
].slice(0, -1).join("")); // "ẞ"
s
eu
RegExp
O sinalizador dotAll
ous
faz .
coincidir os caracteres de quebra de linha, o sinalizador unicode
ouu
habilita certos recursos relacionados ao Unicode.
Exemplos:
const unicodeString = "ẞ🦊",
lineBreakString = "Hello, world!\n";
console.log(lineBreakString.replace(/.$/s, "").endsWith("\n")); // false
console.log(lineBreakString.match(/(.*).$/s) === null); // false
console.log(unicodeString.replace(/.$/su, "")); // ẞ
console.log(unicodeString.match(/(.*).$/su)[1]); // ẞ
// Now `split` can be made Unicode-aware:
const unicodeCharacterArray = unicodeString.split(/(?:)/su),
lineBreakCharacterArray = lineBreakString.split(/(?:)/su);
unicodeCharacterArray.pop();
lineBreakCharacterArray.pop();
console.log(unicodeCharacterArray.join("")); // "ẞ"
console.log(lineBreakCharacterArray.join("").endsWith("\n")); // false
Observe que alguns grafemas consistem em mais de um ponto de código, por exemplo, 🏳️🌈
que consiste na sequência 🏳
(U + 1F3F3), VS16
(U + FE0F) , ZWJ
(U + 200D) , 🌈
(U + 1F308). Aqui, ainda Array.from
vai dividir isso em quatro "caracteres". É possível fazer a correspondência desses itens com a propriedade Unicode .
Nos casos em que você deseja remover algo próximo ao final de uma string (no caso de strings de tamanho variável), você pode combinar slice () e substr ().
Eu tinha uma string com marcação, construída dinamicamente, com uma lista de tags de âncora separadas por vírgula. A string 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, fiz o seguinte:
str = str.slice(0, -5) + str.substr(-4);
Tente o seguinte:
<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/ .
@Jason S:
Você pode usar fatia! Você só precisa ter certeza de que sabe usá-lo. # Positivos são relativos ao início, números negativos são relativos ao final.
js> "12345.00" .slice (0, -1) 12345.0
Desculpe pela minha graphomany, mas a postagem foi marcada como 'jquery' anteriormente. Portanto, você não pode usar slice () dentro do jQuery porque o slice () é o método jQuery para operações com elementos DOM, não substrings ... Em outras palavras, responda @ Jon Erickson sugerir uma solução realmente perfeita.
No entanto, seu método funciona com a função jQuery, dentro de Javascript simples. É preciso dizer que, devido à última discussão nos comentários, que o jQuery é uma extensão muito mais renovável do JS do que o ECMAScript mais conhecido de seus pais.
Aqui também existem dois métodos:
como nosso:
string.substring(from,to)
como mais se o índice 'to' nulled retorna o restante da string. então:
string.substring(from)
positivo ou negativo ...
e alguns outros - substr () - que fornecem faixa de substring e 'length' podem ser positivos apenas:
string.substr(start,length)
Alguns mantenedores também sugerem que o último método string.substr(start,length)
não funciona ou funciona com erro para o MSIE.
String.prototype.slice
é um método nativo
slice()
método jQuery para manipulação DOM: API jQuery: .slice () . E CERTO, isso PODE SER FIGURADO como uma herança polimórfica de JS Array.slice (), mas são dois métodos diferentes, e acho que precisamos diferenciá-lo. Portanto, é apenas uma aproximação a esse conhecimento.
.slice
uma variável que é uma string, ela fará exatamente o que o OP queria. Não importa se ele está "dentro do jQuery" e não há como "interferir" de maneira alguma, a menos que você o substitua String.prototype
pelo jQuery, o que, com certeza, impedirá o funcionamento de QUALQUER código javascript. Sua resposta apenas diz que outra resposta não é boa e o argumento que você fornece está incorreto.
.data
manipulação sofisticada e acabar com essa "string"), que, se você a chamar slice
, não faria o que você quer. Dito isto, esta não é realmente uma resposta útil.
Use substring para obter tudo à esquerda de _bar. Mas primeiro você precisa obter o instr de _bar na string:
str.substring(3, 7);
3 é esse começo e 7 é o comprimento.