Tengo una cadena, 12345.00
y me gustaría que volviera 12345.0
.
Lo he mirado trim
, pero parece que solo está recortando espacios en blanco y slice
que no veo cómo funcionaría esto. ¿Alguna sugerencia?
Math.round('0.5') === 1
;)
Tengo una cadena, 12345.00
y me gustaría que volviera 12345.0
.
Lo he mirado trim
, pero parece que solo está recortando espacios en blanco y slice
que no veo cómo funcionaría esto. ¿Alguna sugerencia?
Math.round('0.5') === 1
;)
Respuestas:
Puedes usar la subcadena función de :
let str = "12345.00";
str = str.substring(0, str.length - 1);
console.log(str);
Esta es la respuesta aceptada, pero según las conversaciones a continuación, la sintaxis de corte es mucho más clara:
let str = "12345.00";
str = str.slice(0, -1);
console.log(str);
str = str.substring(0, str.length -1);
slice
& substring
son casi todos iguales; excepto que slice()
acepta un índice negativo, relativo al final de la cadena, pero no el substring
, arroja un out-of-bound
error
substring
es un 11% más rápido que slice
. jsperf.com/js-slice-vs-substring-test
¡Puedes usar rebanada ! Solo tiene que asegurarse de saber cómo usarlo. Los números positivos son relativos al principio, los números negativos son relativos al final.
js>"12345.00".slice(0,-1)
12345.0
substring
usarse el método también en cadenas dinámicas? ¿Usando str.length para obtener dinámicamente la longitud?
Puede usar el método de subcadena de los objetos de cadena de JavaScript:
s = s.substring(0, s.length - 4)
Elimina incondicionalmente los últimos cuatro caracteres de la cadena s
.
Sin embargo, si desea eliminar condicionalmente los últimos cuatro caracteres, solo si son exactamente _bar
:
var re = /_bar$/;
s.replace(re, "");
slice
Es mejor aquí. s.slice(0, -4)
El método más fácil es usar el slice
método de la cadena, que permite posiciones negativas (correspondientes a las compensaciones desde el final de la cadena):
const s = "your string";
const withoutLastFourChars = s.slice(0, -4);
Si necesita algo más general para eliminar todo después (e incluir) el último guión bajo, puede hacer lo siguiente (siempre que s
se garantice que contenga al menos un guión bajo):
const s = "your_string";
const withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
console.log(withoutLastChunk);
Para un número como su ejemplo, recomendaría hacer esto de nuevo substring
:
console.log(parseFloat('12345.00').toFixed(1));
Sin embargo, tenga en cuenta que esto realmente redondeará el número, lo que me imagino que es deseado, pero tal vez no:
console.log(parseFloat('12345.46').toFixed(1));
Usando la función de división de JavaScript:
let string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here
console.log(string);
Esto podría usarse para eliminar '_bar' al final de una cadena, de cualquier longitud.
Una expresión regular es lo que estás buscando:
let str = "foo_bar";
console.log(str.replace(/_bar$/, ""));
Prueba esto:
const myString = "Hello World!";
console.log(myString.slice(0, -1));
Qué tal si:
let myString = "12345.00";
console.log(myString.substring(0, myString.length - 1));
Utilice expresiones regulares:
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));
Aquí hay una alternativa que no creo haber visto en las otras respuestas, solo por diversión.
var strArr = "hello i'm a string".split("");
strArr.pop();
document.write(strArr.join(""));
No es tan legible o simple como el corte o la subcadena, pero le permite jugar con la cadena usando algunos buenos métodos de matriz, por lo que vale la pena saberlo.
Si desea hacer un redondeo genérico de carrozas, en lugar de simplemente recortar el último carácter:
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
EDITAR: Parece que existe una función integrada para esto, como señala Paolo. Esa solución es obviamente mucho más limpia que la mía. Use parseFloat seguido de 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
Solo usa recortar si no quieres espacios
"11.01 °C".slice(0,-2).trim()
Hoy 2020.05.13 realizo pruebas de las soluciones elegidas en Chrome v81.0, Safari v13.1 y Firefox v76.0 en MacOs High Sierra v10.13.6.
slice(0,-1)
(D) es rápida o solución más rápida para cadenas cortas y largas y se recomienda como solución multi-navegador rápidosubstring
(C) y substr
(E) son rápidasRealizo dos pruebas para las soluciones A , B , C , D , E ( ext ), F , G (my)
Las soluciones se presentan en el siguiente fragmento
Aquí hay resultados de ejemplo para Chrome para cadena corta
String.prototype.{ split, slice, substr, substring }
funciona con cadenas codificadas UTF-16Ninguna de las respuestas anteriores es compatible con Unicode. Las cadenas están codificadas como UTF-16 en la mayoría de los motores JavaScript modernos, pero los puntos de código Unicode más altos requieren pares sustitutos , por lo que los métodos de cadena más antiguos y existentes operan en unidades de código UTF-16, no en puntos 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"
Además, las respuestas de RegExp no coinciden con los saltos de línea al final en su forma actual:
const string = "Hello, world!\n";
console.log(string.replace(/.$/, "").endsWith("\n")); // true
console.log(string.match(/(.*).$/) === null); // true
El código compatible con Unicode utiliza el iterador de la cadena; Ver Array.from
y ...
difundir .
string[Symbol.iterator]
se puede usar (por ejemplo, en lugar destring
) también.
Consulte también Cómo dividir cadenas Unicode en caracteres en JavaScript .
Ejemplos:
const string = "ẞ🦊";
console.log(Array.from(string).slice(0, -1).join("")); // "ẞ"
console.log([
...string
].slice(0, -1).join("")); // "ẞ"
s
y u
en unRegExp
El indicador dotAll
os
hace .
coincidir los caracteres de salto de línea, el indicador unicode
ou
habilita ciertas funciones relacionadas con Unicode.
Ejemplos:
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
Tenga en cuenta que algunos grafemas consisten en más de un punto de código, por ejemplo, 🏳️🌈
que consiste en la secuencia 🏳
(U + 1F3F3), VS16
(U + FE0F) , ZWJ
(U + 200D) , 🌈
(U + 1F308). Aquí, incluso Array.from
dividirá esto en cuatro "personajes". Es posible que coincidan con la propuesta de propiedades de secuencia de la propiedad Unicode .
En los casos en que desee eliminar algo que esté cerca del final de una cadena (en el caso de cadenas de tamaño variable), puede combinar slice () y substr ().
Tenía una cadena con marcado, construida dinámicamente, con una lista de etiquetas de anclaje separadas por comas. La cadena era algo así como:
var str = "<a>text 1,</a><a>text 2,</a><a>text 2.3,</a><a>text abc,</a>";
Para eliminar la última coma, hice lo siguiente:
str = str.slice(0, -5) + str.substr(-4);
Prueba esto:
<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>
También puede probar el ejemplo de trabajo en vivo en http://jsfiddle.net/informativejavascript/F7WTn/87/ .
@Jason S:
¡Puedes usar rebanada! Solo tiene que asegurarse de saber cómo usarlo. Los números positivos son relativos al principio, los números negativos son relativos al final.
js> "12345.00" .slice (0, -1) 12345.0
Lo siento por mi grafomanía, pero la publicación fue etiquetada 'jquery' anteriormente. Por lo tanto, no puede usar slice () dentro de jQuery porque slice () es un método jQuery para operaciones con elementos DOM, no subcadenas ... En otras palabras, la respuesta @Jon Erickson sugiere una solución realmente perfecta.
Sin embargo, su método funcionará con la función jQuery, dentro de Javascript simple. Es necesario decir, debido a la última discusión en los comentarios, que jQuery es una extensión de JS con mucha más frecuencia renovable que su ECMAScript más conocido.
Aquí también existen dos métodos:
como el nuestro:
string.substring(from,to)
como plus si 'to' index nulled devuelve el resto de la cadena. entonces:
string.substring(from)
positivo o negativo ...
y algunos otros - substr () - que proporcionan un rango de subcadena y 'longitud' solo pueden ser positivos:
string.substr(start,length)
También algunos mantenedores sugieren que el último método string.substr(start,length)
no funciona o funciona con error para MSIE.
String.prototype.slice
es un método nativo
slice()
método jQuery para la manipulación DOM: jQuery API: .slice () . Y SEGURO, eso PUEDE FIGURARSE como una herencia polimórfica de JS Array.slice (), pero es dos métodos diferentes, y creo que necesita distinguirlo. Entonces es solo una aproximación a este conocimiento.
.slice
a una variable que es una cadena, hará exactamente lo que el OP quería. No importa si está "dentro de jQuery" y no hay forma de que pueda "interferir" de ninguna manera a menos que sobrescriba String.prototype
con jQuery, lo que estoy seguro evitará que CUALQUIER código de JavaScript funcione. Su respuesta solo dice que otra respuesta no es buena y el argumento que proporciona es incorrecto.
.data
manipulación sofisticada y terminas con esta "cadena"), que si la invocaste slice
, No haría lo que quisieras. Dicho esto, esta no es realmente una respuesta útil.
Use la subcadena para obtener todo a la izquierda de _bar. Pero primero tienes que obtener el instr de _bar en la cadena:
str.substring(3, 7);
3 es ese comienzo y 7 es la longitud.