javascript - Jag vill trunkera en text från ett av elementen i min array


Jag har ett tabellnyhet:

export class News{
  id: string;
  name: string;
  text: string;
  admin: boolean;
  users: Users;
 }

Jag har en metod som returnerar listan över news.ts:

news: News[];
pageNews: News[];

getNews(): void {   
//let MaxLength = 5;
this.newsService.getnews().subscribe(res => {
    this.news= res;
    this.pageNews= this.news.slice(0, 10);
 }
);}

i news.html:

<table class="table table-bordered table-striped" style="border: none;">
    <thead>
        <tr>
            <td class="title-column">Id</td>
            <td class="title-column">Name</td>
            <td class="title-column">Text</td>
        </tr>
    </thead>
       <tr *ngFor="let u of pageNews">
            <td class="row-mid">{{u.id}}</td>
            <td class="row-mid">{{u.name}}</td>
            <td class="row-mid">{{u.text}}</td>
       </tr>                  
</table>

men när namnet eller texten är för lång, rinner min tabell över, så jag skulle vilja förkorta mitt namn och min text när det överstiger 20 tecken och sätta punkter efteråt. Exempel:

string s = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
result = 'aaaaaaaa...'

Jag försöker i min news.ts men det fungerar inte

news: News[];
pageNews: News[];

getNews(): void {   
//let MaxLength = 5;
this.newsService.getnews().subscribe(res => {
    this.news= res.filter(e=>{e.name= e.name.substring(0,20) + '...',
    e.text= e.text.substring(0,20) + '...';});
    this.pageNews= this.news.slice(0, 10);
 }
);}

Svar #1

Du kan använda bootstrap 4-klass text-truncate

<span class="d-inline-block text-truncate" style="max-width: 150px;">
     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.
</span>

Svar #2

Jag tror att det bättre sättet skulle vara att använda CSS för att "klippa" innehållet. Ställ in max-width på kolumnerna och korrigera värdena för textöverskridande:

white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;

Du kommer att behålla din data och få en trevlig, dynamisk trunkering.

Redigera

Om du fortfarande vill redigera dina data rekommenderar jag att du använder substr i din prenumeration på följande sätt:

this.newsService.getnews().subscribe(res => {
  this.news= res;
  this.pageNews = this.news.slice(0, 10).map((post) => {
    return {
      ...post,
      name: post.name.substring(0, 10) + '...'
    }
  });
}