文字列を持っています。12345.00
返して欲しいの12345.0
ですが。
私は見ましたがtrim
、それは空白を削除slice
するだけで、これがどのように機能するのかわかりません。助言がありますか?
Math.round('0.5') === 1
;)
文字列を持っています。12345.00
返して欲しいの12345.0
ですが。
私は見ましたがtrim
、それは空白を削除slice
するだけで、これがどのように機能するのかわかりません。助言がありますか?
Math.round('0.5') === 1
;)
回答:
サブストリング関数を使用できます。
let str = "12345.00";
str = str.substring(0, str.length - 1);
console.log(str);
これは受け入れられる答えですが、以下の会話のように、スライス構文ははるかに明確です:
let str = "12345.00";
str = str.slice(0, -1);
console.log(str);
str = str.substring(0, str.length -1);
slice
&substring
の方法は、すべてのほとんど同じです。を除いて、slice()
は文字列の終わりを基準にして負のインデックスを受け入れますが、を受け入れませんsubstring
。それはout-of-bound
エラーをスローします
スライスが使えます!あなたはそれを使用する方法を知っていることを確認する必要があります。正の数は最初を基準とし、負の数は終点を基準とします。
js>"12345.00".slice(0,-1)
12345.0
substring
メソッドは動的文字列にも使用できませんでしたか?str.lengthを使用して動的に長さを取得しますか?
JavaScript文字列オブジェクトのsubstringメソッドを使用できます。
s = s.substring(0, s.length - 4)
stringから最後の4文字を無条件に削除しますs
。
ただし、最後の4文字を条件付きで削除する場合は、それらが正確に _bar
次の場合に限られます。
var re = /_bar$/;
s.replace(re, "");
slice
ここが良いです。s.slice(0, -4)
最も簡単な方法はslice
、負の位置を許可する文字列のメソッドを使用することです(文字列の末尾からのオフセットに対応)。
const s = "your string";
const withoutLastFourChars = s.slice(0, -4);
最後のアンダースコアの後(およびアンダースコアを含む)をすべて削除するためのより一般的なものが必要な場合は、次の操作を実行できます(s
少なくとも1つのアンダースコアが含まれていることが保証されている場合)。
const s = "your_string";
const withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
console.log(withoutLastChunk);
あなたの例のような数については、これを上に行うことをお勧めしsubstring
ます:
console.log(parseFloat('12345.00').toFixed(1));
ただし、これは実際には数値を四捨五入することになることに注意してください。
console.log(parseFloat('12345.46').toFixed(1));
JavaScriptのスライス関数を使用する:
let string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here
console.log(string);
これは、任意の長さの文字列の末尾にある「_bar」を削除するために使用できます。
これを試して:
const myString = "Hello World!";
console.log(myString.slice(0, -1));
正規表現を使用する:
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));
楽しみのためだけに、他の回答では見たことがないと思う代替案を示します。
var strArr = "hello i'm a string".split("");
strArr.pop();
document.write(strArr.join(""));
スライスや部分文字列ほど読みやすくまたは単純ではありませんが、いくつかの優れた配列メソッドを使用して文字列を操作できるので、知っておく価値があります。
最後の文字を単にトリミングするのではなく、フロートの一般的な丸めを行いたい場合:
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
編集:パオロが指摘するように、このための組み込み関数が存在するようです。その解決策は私のものよりも明らかにクリーンです。parseFloatの後に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
スペースが必要ない場合は、トリムを使用してください
"11.01 °C".slice(0,-2).trim()
今日2020.05.13私はMacOs High Sierra v10.13.6上のChrome v81.0、Safari v13.1、Firefox v76.0で選択したソリューションのテストを実行します。
slice(0,-1)
(D)は、高速または短いと長い文字列のための最速のソリューションであり、それは速いクロスブラウザのソリューションとして推奨されますsubstring
(C)とsubstr
(E)に基づくソリューションは高速ですソリューションA、B、C、D、E(ext)、F、G(my)に対して2つのテストを実行します
ソリューションは以下のスニペットに示されています
以下は、短い文字列のChromeの結果の例です
String.prototype.{ split, slice, substr, substring }
UTF-16でエンコードされた文字列を操作することに注意してください上記の答えはどれもUnicode対応ではありません。最新のほとんどのJavaScriptエンジンでは文字列はUTF-16としてエンコードされますが、より高いUnicodeコードポイントにはサロゲートペアが必要になるため、既存の既存の文字列メソッドは、UnicodeコードポイントではなくUTF-16コード単位で動作します。
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"
さらに、RegExpの回答は、現在の形式の最後の改行と一致しません。
const string = "Hello, world!\n";
console.log(string.replace(/.$/, "").endsWith("\n")); // true
console.log(string.match(/(.*).$/) === null); // true
Unicode対応のコードは文字列の反復子を利用します。見Array.from
て...
広がる。
string[Symbol.iterator]
使用できます(例:string
)。
JavaScriptでUnicode文字列を文字に分割する方法もご覧ください。
例:
const string = "ẞ🦊";
console.log(Array.from(string).slice(0, -1).join("")); // "ẞ"
console.log([
...string
].slice(0, -1).join("")); // "ẞ"
s
とu
フラグを使用しますRegExp
dotAll
またはs
フラグますが、.
改行文字を一致させる、unicode
またはu
フラグが特定のUnicode関連の機能を有効にします。
例:
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
一部の書記素は、たとえば(U + 1F3F3)、(U + FE0F)、(U + 200D)、(U + 1F308)🏳️🌈
のシーケンスで構成される、複数のコードポイントで構成されることに注意してください。ここでは、これを4つの「文字」に分割します。Unicodeプロパティエスケープシーケンスプロパティの提案を使用すると、これらを一致させることができます。🏳
VS16
ZWJ
🌈
Array.from
これを試して:
<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>
http://jsfiddle.net/informativejavascript/F7WTn/87/で実際に動作する例を試すこともできます。
@ジェイソンS:
スライスが使えます!あなたはそれを使用する方法を知っていることを確認する必要があります。正の数は最初を基準とし、負の数は終点を基準とします。
js> "12345.00" .slice(0、-1)12345.0
私の書記は申し訳ありませんが、以前の投稿には「jquery」というタグが付けられていました。つまり、slice()は部分文字列ではなくDOM要素を使用した操作のjQueryメソッドであるため、jQuery 内でslice()を使用することはできません ...言い換えると、@ Jon Erickson本当に最適なソリューションを提案します。
ただし、メソッドはjQuery関数の外で、単純なJavascript内で機能します。コメントでの最後の議論のために、jQueryは、彼自身の最も有名なECMAScriptよりもはるかに頻繁にJSの更新可能な拡張機能であると言う必要があります。
ここにも2つの方法があります。
私たちのように:
string.substring(from,to)
プラスとして、「to」インデックスがnullの場合、残りの文字列を返します。そう:
string.substring(from)
正または負...
と他のいくつか-substr()-部分文字列と '長さ'の範囲を提供するものは正のみです
string.substr(start,length)
また、一部のメンテナはstring.substr(start,length)
、MSIEの最後の方法が機能しないか、エラーで機能すると示唆しています。
String.prototype.slice
ネイティブメソッドです
slice()
、DOM操作用のjQuery メソッド:jQuery API:.slice()。そして確かに、それはJS Array.slice()の多相継承のように考えられますが、これは2つの異なるメソッドであり、区別する必要があると思います。したがって、これはこの知識の近似にすぎません。
.slice
文字列である変数を呼び出すと、OPが望んでいたことを実行します。それが「jQueryの内部」であるかどうかは関係ありませんString.prototype
。jQueryで上書きしない限り、それが「干渉」する方法はありません。jQueryで上書きしないと、JavaScriptコードが機能しなくなると確信しています。あなたの答えは、他の答えは良くなく、あなたが提供する議論は正しくないと言っているだけです。
.data
操作を行い、この「文字列」で終わる場合)slice
。あなたが望むことをしないでしょう。とは言っても、これは本当に役立つ答えではありません。
サブストリングを使用して、_barの左側にあるすべてのものを取得します。しかし、最初に文字列で_barのinstrを取得する必要があります。
str.substring(3, 7);
3はその開始、7は長さです。