你可以使用正則表達式:
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已包含修改後的版本,因此不需要返回或創建新變量。
如果你改變對象替換文本溢流無論如何,沒有必要使用'map'。如果你知道每個對象都有一個'text'屬性,就不需要使用'obj ['text'] &&'。如果屬性名稱不是動態的,則不需要括號符號,因此請使用'.text'。 – Bergi
如果你在UI中顯示這個文本,我會使用css text-overflow:ellipsis;而不是刪除內容 – Praveen
@Bergi關於點符號與括號符號的公平點。如果代碼被縮小或者例如在Google Closure Compiler中處於高級編譯模式,則可能需要小心。 – nishanths