2015-10-16 53 views
0

我有一個數組(foo)的對象,每個對象都有一個名爲「text」的字段,其中一些字段非常長;所以我不得不限制文字的100個字符;你會做同樣的方法切割到JavaScript中的100個字符?我相信這樣做有更好的方法......或者如果它已經乾淨了,你可以確認我嗎?感謝在javascript中將文本字段切換爲100個字符

 results = foo.map(function(obj){ 
      if(obj['text'] && obj['text'].length >100){ 
       obj['text'] = obj['text'].substr(0,97)+"..."; 
      } 
      return obj;      
     }) 
+0

如果你改變對象替換文本溢流無論如何,沒有必要使用'map'。如果你知道每個對象都有一個'text'屬性,就不需要使用'obj ['text'] &&'。如果屬性名稱不是動態的,則不需要括號符號,因此請使用'.text'。 – Bergi

+1

如果你在UI中顯示這個文本,我會使用css text-overflow:ellipsis;而不是刪除內容 – Praveen

+0

@Bergi關於點符號與括號符號的公平點。如果代碼被縮小或者例如在Google Closure Compiler中處於高級編譯模式,則可能需要小心。 – nishanths

回答

0

在您的示例代碼中,foo數組中的對象的text屬性被修改。下面的代碼假定你的意思去做了:

foo.forEach(function(obj) { 
    if (obj['text'] && obj['text'].length > 100) { 
     obj['text'] = obj['text'].substr(0, 97) + '...'; 
    } 
}); 

所以,只改變一個真正讓它習慣:使用forEach代替map

-1

您可以使用substring

if (data.length > 100) { 

    // truncate string 
    datacut = data.substring(0, 50); 

} 
+0

它對'substr'有什麼區別? – Bergi

+0

@Bergi不同之處在於第二個參數。 substring的第二個參數是要停止的索引(但不包括),但substr的第二個參數是要返回的最大長度。 –

+0

所以如果第一個參數是'0',那麼它絕對沒有區別,是嗎?除了OP要求'97'時'50'顯然是錯誤的。 – Bergi

-1

你可以使用正則表達式:

var foo = [ 
    {'text': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab'}, // length 101 
    {'text': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'}, // length 100 
    {'blah': 'a'} 
] 

var re = /(.{97}).{4,}/; 
foo.map(function(obj) { 
    obj['text'] && (obj['text'] = obj['text'].replace(re, '$1...')); 
}) 

foo 

> foo 
[ { text: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...' }, 
    { text: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' }, 
    { blah: 'a' } ] 

另外,由於您正在替換obj ['text'],因此foo已包含修改後的版本,因此不需要返回或創建新變量。

相關問題