![](/img/trans.png)
[英]What is the best way in JavaScript to trim down the properties of an object?
[英]What is the best way to trim() in javascript
問題說明了一切。 JS似乎沒有本地的trim()方法。
根據此頁面 ,最好的全方位方法是
return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
當然,如果您使用的是jQuery,它將為您提供優化的修剪方法。
我知道這個問題很古老,但現在Javascript確實有一個本機.trim()
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/Trim
好吧,正如很多人經常說的那樣,trim函數運行得很好,但是如果您不想僅僅使用整個框架來執行修剪,那么看看它的實現可能會很有用。 所以這里是:
function( text ) { return (text || "").replace( /^(\s|\u00A0)+|(\s|\u00A0)+$/g, "" );}
與這里已經提出的其他解決方案相比,我在此實現中看到的主要優點是:
正如其他一些人已經指出的那樣,通常最好使用第三方JS庫來完成這種事情。 不是說trim()是一個構建自己的復雜函數,而是您可能不需要太多的JavaScript原生函數,最終卻要自己編寫,使用庫很快變得更具成本效益。
當然,使用JS庫的另一個優點是,作者進行了艱苦的工作,以確保這些功能可在所有主要瀏覽器上正常工作,以便您可以編寫標准接口的代碼,而不必擔心Internet Explorer與所有瀏覽器之間的煩人差異。其他瀏覽器。
@Pat的略微版本。
return str.replace( /^\s+|\s+$/g, '' );
對於ltrim,將字符串開頭的空格替換為空:
str2 = str.replace(/^\s+/,'');
對於rtrim,將字符串末尾的空格替換為空:
str2 = str.replace(/\s+$/,'');
修剪:
str2 = str.replace(/^\s+|\s+$/g,'');
這些都使用正則表達式來完成實際工作。
// Licensed under BSD
function myBestTrim( str ){
var start = -1,
end = str.length;
while( str.charCodeAt(--end) < 33 );
while( str.charCodeAt(++start) < 33 );
return str.slice( start, end + 1 );
};
我的解決方案是這樣的(因為Firefox 3.5及更高版本中的String對象已經具有trim
方法 ):
String.prototype.trim = String.prototype.trim || function () {
var start = -1,
end = this.length;
while( this.charCodeAt(--end) < 33 );
while( this.charCodeAt(++start) < 33 );
return this.slice( start, end + 1 );
};
為什么不修改String原型呢? 為什么不像我在YUI那樣在開源庫中竊取修整功能? (您真的需要為此簡單的任務加載整個框架嗎?)將它們放在一起,您會得到:
String.prototype.trim = function() {
try {
return this.replace(/^\s+|\s+$/g, "");
} catch(e) {
return this;
}
}
var s = " hello ";
alert(s.trim() == "hello"); // displays true
我考慮了微調功能的速度。 此功能明顯擊敗了所有24個競爭對手(其中許多使用正則表達式)以及Chrome和Chromium(!)的本機string.trim(),並且性能與Safari的trim()一樣快。 測試結果在這里: http : //jsperf.com/mega-trim-test/7
function trim27(str) {
var c;
for (var i = 0; i < str.length; i++) {
c = str.charCodeAt(i);
if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12)
continue; else break;
}
for (var j = str.length - 1; j >= i; j--) {
c = str.charCodeAt(j);
if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12)
continue; else break;
}
return str.substring(i, j + 1);
}
該函數可修剪字符“ \\ n \\ r \\ t \\ f”,但添加更多的空白字符很容易,例如。 那些將regexp用作空格(\\ s)的文件,但只損失很小的性能(請參閱http://jsperf.com/mega-trim-test/8 )。
編輯:以前的trim27()僅修剪最常見的字符(“ \\ n \\ r \\ t \\ f”),但是要修剪所有可能的空格,我在新函數mytrim()下面添加了它:
if (!String.prototype.trim || "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF".trim() || navigator.userAgent.toString().toLowerCase().indexOf("chrome") != -1)
var mytrim = function(str) {
var c;
for (var i = 0; i < str.length; i++) {
c = str.charCodeAt(i);
if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12 || c == 11 || c == 160 || c == 5760 || c == 6158 || c == 8192 || c == 8193 || c == 8194 || c == 8195 || c == 8196 || c == 8197 || c == 8198 || c == 8199 || c == 8200 || c == 8201 || c == 8202 || c == 8232 || c == 8233 || c == 8239 || c == 8287 || c == 12288 || c == 65279)
continue; else break;
}
for (var j = str.length - 1; j >= i; j--) {
c = str.charCodeAt(j);
if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12 || c == 11 || c == 160 || c == 5760 || c == 6158 || c == 8192 || c == 8193 || c == 8194 || c == 8195 || c == 8196 || c == 8197 || c == 8198 || c == 8199 || c == 8200 || c == 8201 || c == 8202 || c == 8232 || c == 8233 || c == 8239 || c == 8287 || c == 12288 || c == 65279)
continue; else break;
}
return str.substring(i, j + 1);
};
else var mytrim = function(str) {
return str.trim();
}
使用這種方式:
var foo = mytrim(" \n \t Trimmed \f \n "); // foo is now "Trimmed"
上面的mytrim()執行以下操作:
我將其與本機JavaScript一起使用
// Adding trim function to String object if its not there
if(typeof String.prototype.trim !== 'function') {
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
}
}
這樣使用
var myString = " some text ";
alert(myString.trim());
例
// Adding trim function to String object if its not there if(typeof String.prototype.trim !== 'function') { String.prototype.trim = function() { return this.replace(/^\\s+|\\s+$/g, ''); } } var str = " some text "; console.log(str.trim());
我用這個
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g,"");
}
眾多JavaScript問題的答案:jQuery
$j.trim(string)
注意:以上假設您的jQuery已設置為:
<script type="text/javascript">$j = jQuery.noConflict();</script>
它比“ $”更明智,比每次鍵入“ jQuery”都更冗長。
Microsoft .NET還具有String.trim函數,作為JavaScript基本類型擴展的一部分。 如果您正在編碼ASP.NET應用程序,則可以使用它。
這可能不是最快的,並且可能違反了“ .trim()”可能應該是的事實,但是我不喜歡RegExs(主要是因為花了很多時間才能弄清它們的真正含義/作用),我喜歡無論我是否安裝了jQuery,知道的東西都可以工作(更不用說正確的版本了,因為我使用jQuery 1.4.2嘗試了$ .trim(myVar)卻無法正常工作),並且將擺脫所有多余的空間,而不僅僅是在結尾處,應該像這樣重建它:
function Trim(obj) {
var coll = "";
var arrObj = obj.split(' ');
for (var i=0;i<arrObj.length;i++) {
if (arrObj[i] == "") {
arrObj.splice(i,1); // removes array indices containing spaces
}
}
//alert(arrObj.length); // should be equal to the number of words
// Rebuilds with spaces in-between words, but without spaces at the end
for (var i=0;i<arrObj.length;i++) {
if (arrObj[i] != "" && i != arrObj.length-1)
coll += arrObj[i] + " ";
if (arrObj[i] != "" && i == arrObj.length-1)
coll += arrObj[i];
}
return coll;
}
這是一個老問題,但這些都不對我有用。 我只需要剪裁前后的空白,這就是我所做的。 我的div標簽的ID為=開始日期。
$("#start-date").text().trim()
我用這個:
使用功能。
function trim($) {
return (typeof $ == "function" ? $() : $).replace(/[\s]*/g,"")
}
code example:
trim((function(){ return "a b"})) // ab
trim(" a b") //ab
您可以使用以下...
function trim(str) {
try {
if (str && typeof(str) == 'string') {
return str.replace(/^\s*|\s*$/g, "");
} else {
return '';
}
} catch (e) {
return str;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.