Tôi có một chuỗi, 12345.00
và tôi muốn nó trở lại 12345.0
.
Tôi đã xem xét trim
, nhưng có vẻ như nó chỉ cắt xén khoảng trắng và slice
tôi không thấy nó sẽ hoạt động như thế nào. Bất kỳ đề xuất?
Math.round('0.5') === 1
;)
Tôi có một chuỗi, 12345.00
và tôi muốn nó trở lại 12345.0
.
Tôi đã xem xét trim
, nhưng có vẻ như nó chỉ cắt xén khoảng trắng và slice
tôi không thấy nó sẽ hoạt động như thế nào. Bất kỳ đề xuất?
Math.round('0.5') === 1
;)
Câu trả lời:
Bạn có thể sử dụng chức năng chuỗi con :
let str = "12345.00";
str = str.substring(0, str.length - 1);
console.log(str);
Đây là câu trả lời được chấp nhận, nhưng theo các cuộc hội thoại dưới đây, cú pháp lát rõ ràng hơn nhiều:
let str = "12345.00";
str = str.slice(0, -1);
console.log(str);
str = str.substring(0, str.length -1);
slice
& substring
đều giống nhau; ngoại trừ việc slice()
chấp nhận một chỉ số âm, liên quan đến cuối chuỗi, nhưng không phải là lỗi substring
, nó sẽ out-of-bound
gây ra lỗi
substring
là nhanh hơn 11% slice
. jsperf.com/js-slice-vs-substring-test
Bạn có thể sử dụng lát ! Bạn chỉ cần chắc chắn rằng bạn biết cách sử dụng nó. Số dương có liên quan đến đầu, số âm có liên quan đến cuối.
js>"12345.00".slice(0,-1)
12345.0
substring
thể sử dụng phương thức này trên các chuỗi động? Bằng cách sử dụng str.length để tự động lấy chiều dài?
Bạn có thể sử dụng phương thức chuỗi con của các đối tượng chuỗi JavaScript:
s = s.substring(0, s.length - 4)
Nó vô điều kiện loại bỏ bốn ký tự cuối cùng khỏi chuỗi s
.
Tuy nhiên, nếu bạn muốn loại bỏ có điều kiện bốn ký tự cuối cùng, chỉ khi chúng chính xác _bar
:
var re = /_bar$/;
s.replace(re, "");
slice
ở đây tốt hơn s.slice(0, -4)
Phương pháp đơn giản nhất là sử dụng slice
phương thức của chuỗi, cho phép các vị trí âm (tương ứng với độ lệch từ cuối chuỗi):
const s = "your string";
const withoutLastFourChars = s.slice(0, -4);
Nếu bạn cần một cái gì đó tổng quát hơn để loại bỏ mọi thứ sau (và bao gồm) dấu gạch dưới cuối cùng, bạn có thể thực hiện các thao tác sau (miễn là s
được đảm bảo có ít nhất một dấu gạch dưới):
const s = "your_string";
const withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
console.log(withoutLastChunk);
Đối với một số như ví dụ của bạn, tôi khuyên bạn nên làm điều này hơn substring
:
console.log(parseFloat('12345.00').toFixed(1));
Xin lưu ý rằng điều này thực sự sẽ làm tròn số, mặc dù, điều mà tôi tưởng tượng là mong muốn nhưng có thể không:
console.log(parseFloat('12345.46').toFixed(1));
Sử dụng hàm lát cắt của JavaScript:
let string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here
console.log(string);
Điều này có thể được sử dụng để xóa '_bar' ở cuối chuỗi, có độ dài bất kỳ.
Một biểu thức chính quy là những gì bạn đang tìm kiếm:
let str = "foo_bar";
console.log(str.replace(/_bar$/, ""));
Thử cái này:
const myString = "Hello World!";
console.log(myString.slice(0, -1));
Làm thế nào về:
let myString = "12345.00";
console.log(myString.substring(0, myString.length - 1));
Sử dụng 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));
Đây là một thay thế mà tôi không nghĩ rằng tôi đã thấy trong các câu trả lời khác, chỉ để cho vui.
var strArr = "hello i'm a string".split("");
strArr.pop();
document.write(strArr.join(""));
Không dễ đọc hoặc đơn giản như lát hoặc chuỗi con nhưng không cho phép bạn chơi với chuỗi bằng một số phương thức mảng đẹp, rất đáng để biết.
Nếu bạn muốn làm tròn số phao chung, thay vì chỉ cắt bớt ký tự cuối cùng:
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: Có vẻ như tồn tại một chức năng được xây dựng cho việc này, như Paolo chỉ ra. Giải pháp đó rõ ràng là sạch hơn tôi nhiều. Sử dụng parseFloat theo sau là 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-char character-in-a- chuỗi
Chỉ cần sử dụng trim nếu bạn không muốn không gian
"11.01 °C".slice(0,-2).trim()
Hôm nay 2020.05.13 Tôi thực hiện kiểm tra các giải pháp được chọn trên Chrome v81.0, Safari v13.1 và Firefox v76.0 trên MacOs High Sierra v10.13.6.
slice(0,-1)
(D) là nhanh hay giải pháp nhanh nhất cho các chuỗi ngắn hạn và dài và nó được khuyến cáo như là giải pháp qua trình duyệt nhanhsubstring
(C) vàsubstr
(E) là nhanh chóngTôi thực hiện hai bài kiểm tra cho các giải pháp A , B , C , D , E ( ext ), F , G (my)
Các giải pháp được trình bày trong đoạn trích dưới đây
Dưới đây là kết quả ví dụ cho Chrome cho chuỗi ngắn
String.prototype.{ split, slice, substr, substring }
hoạt động trên các chuỗi được mã hóa UTF-16Không có câu trả lời nào trước đây là nhận thức về Unicode. Các chuỗi được mã hóa dưới dạng UTF-16 trong hầu hết các công cụ JavaScript hiện đại, nhưng các điểm mã Unicode cao hơn yêu cầu các cặp thay thế , vì vậy các phương thức chuỗi cũ hơn, hoạt động trên các đơn vị mã UTF-16, không phải các điểm mã 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"
Ngoài ra, các câu trả lời RegExp không khớp dòng ngắt ở cuối ở dạng hiện tại của chúng:
const string = "Hello, world!\n";
console.log(string.replace(/.$/, "").endsWith("\n")); // true
console.log(string.match(/(.*).$/) === null); // true
Mã nhận biết Unicode sử dụng trình vòng lặp của chuỗi; nhìn thấy Array.from
và ...
lan rộng .
string[Symbol.iterator]
có thể được sử dụng (ví dụ thay vìstring
) là tốt.
Xem thêm Cách chia chuỗi Unicode thành các ký tự trong JavaScript .
Ví dụ:
const string = "ẞ🦊";
console.log(Array.from(string).slice(0, -1).join("")); // "ẞ"
console.log([
...string
].slice(0, -1).join("")); // "ẞ"
s
và u
cờ trên mộtRegExp
Các dotAll
hoặc s
cờ làm cho .
ký tự ngắt dòng phù hợp, các unicode
hoặc u
cờ cho phép một số tính năng Unicode liên quan.
Ví dụ:
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
Lưu ý rằng một số biểu đồ bao gồm nhiều hơn một điểm mã, ví dụ 🏳️🌈
bao gồm chuỗi 🏳
(U + 1F3F3), VS16
(U + FE0F) , ZWJ
(U + 200D) , 🌈
(U + 1F308). Ở đây, thậm chí Array.from
sẽ chia thành bốn nhân vật khác. Có thể phù hợp với các thuộc tính Unicode với đề xuất thuộc tính chuỗi thoát .
Trong trường hợp bạn muốn loại bỏ thứ gì đó ở gần cuối chuỗi (trong trường hợp chuỗi có kích thước thay đổi), bạn có thể kết hợp lát () và chất nền ().
Tôi đã có một chuỗi với đánh dấu, được xây dựng động, với một danh sách các thẻ neo được phân tách bằng dấu phẩy. Chuỗi là một cái gì đó như:
var str = "<a>text 1,</a><a>text 2,</a><a>text 2.3,</a><a>text abc,</a>";
Để xóa dấu phẩy cuối cùng tôi đã làm như sau:
str = str.slice(0, -5) + str.substr(-4);
Thử cái này:
<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>
Bạn cũng có thể thử ví dụ làm việc trực tiếp trên http://jsfiddle.net/informativejavascript/F7WTn/87/ .
@Jonon S:
Bạn có thể sử dụng lát! Bạn chỉ cần chắc chắn rằng bạn biết cách sử dụng nó. Số dương có liên quan đến đầu, số âm có liên quan đến cuối.
js> "12345.00" .slice (0, -1) 12345.0
Xin lỗi vì đồ thị của tôi nhưng bài đăng đã được gắn thẻ 'jquery' trước đó. Vì vậy, bạn không thể sử dụng lát () bên trong jQuery vì lát () là phương thức jQuery cho các hoạt động với các phần tử DOM, không phải là chuỗi con ... Nói cách khác, câu trả lời @Jon Erickson đề xuất giải pháp thực sự hoàn hảo.
Tuy nhiên, phương thức của bạn sẽ hoạt động ngoài chức năng jQuery, bên trong Javascript đơn giản. Cần phải nói do cuộc thảo luận cuối cùng trong các bình luận, rằng jQuery là phần mở rộng của JS thường xuyên hơn rất nhiều so với ECMAScript được biết đến nhiều nhất của cha mẹ anh ấy.
Ở đây cũng tồn tại hai phương thức:
như là của chúng ta:
string.substring(from,to)
as plus if 'to' index nulled trả về phần còn lại của chuỗi. vì vậy:
string.substring(from)
tích cực hay tiêu cực ...
và một số khác - chất nền () - cung cấp phạm vi của chuỗi con và 'độ dài' chỉ có thể dương:
string.substr(start,length)
Ngoài ra, một số nhà bảo trì đề xuất rằng phương pháp cuối cùng string.substr(start,length)
không hoạt động hoặc hoạt động với lỗi cho MSIE.
String.prototype.slice
là một phương pháp bản địa
slice()
phương thức jQuery để thao tác DOM: API jQuery: .slice () . VÀ CHẮC CHẮN, đó là CÓ THỂ ĐƯỢC TÌM KIẾM như một sự kế thừa đa hình của JS Array.slice (), nhưng đó là hai phương thức khác nhau và tôi nghĩ cần phải phân biệt nó. Vì vậy, nó chỉ là một xấp xỉ với kiến thức này.
.slice
một biến là một chuỗi, nó sẽ thực hiện đúng như những gì OP muốn. Sẽ không thành vấn đề nếu nó "bên trong jQuery" và không có cách nào nó có thể "can thiệp" theo bất kỳ cách nào trừ khi bạn ghi đè lên String.prototype
jQuery, điều mà tôi chắc chắn sẽ ngăn BẤT K code mã javascript nào hoạt động. Câu trả lời của bạn chỉ nói rằng câu trả lời khác là không tốt và lập luận bạn cung cấp là không chính xác.
.data
thao tác ưa thích và kết thúc bằng "chuỗi" này), nếu bạn gọi slice
nó, sẽ không làm những gì bạn muốn. Điều đó nói rằng, đây không thực sự là một câu trả lời hữu ích.
Sử dụng chuỗi con để có được mọi thứ ở bên trái của _bar. Nhưng trước tiên, bạn phải có được các thanh của _bar trong chuỗi:
str.substring(3, 7);
3 là bắt đầu và 7 là chiều dài.