J'ai ce tableau simple ci-dessous, par exemple:

[
  { team: { name: 'Newport County AFC' } },
  { team: { name: 'Southport FC' } },
  { team: { name: 'AFC Fylde' } },
  { team: { name: 'FC United' } }
]

Je souhaite supprimer les sous-chaînes FC et AFC des noms d'équipe donnés uniquement sur la dernière partie / occurrence de la chaîne.

Je ne peux que trouver ce code ci-dessous, que vous pouvez également voir ici

arr.forEach(function(key, index, array)
{
    let teamname = key.team.name.replace(/AFC|FC/g,'');
    array[index] = teamname;
});

Cependant, il y a un problème, pourquoi? parce que certains noms d'équipe commencent par FC ou AFC, ils seront donc supprimés et mon approche laisse également les chaînes avec des espaces, ce qui n'est pas la façon dont je veux.

Ma sortie attendue est:

['Newport County', 'Southport', 'AFC Fylde', 'FC United']

Alors, comment puis-je y parvenir? existe-t-il un moyen d'améliorer le code ou une meilleure solution?

4
skyline33 26 janv. 2019 à 22:31

3 réponses

Meilleure réponse

Vous pouvez également rechercher la fin de la chaîne.

var array = [{ team: { name: 'Newport County AFC' } }, { team: { name: 'Southport FC' } }, { team: { name: 'AFC Fylde' } }, { team: { name: 'FC United' } }];

array.forEach(function(object) {
    object.team.name = object.team.name.replace(/\s*(AFC|FC)$/, '');
});

console.log(array);
2
Nina Scholz 26 janv. 2019 à 19:37

Voici une option utilisant replace avec un regex différent

   var teams = [
      {
        team: { name: 'Newport County AFC' }
      },
      {
        team: { name: 'Southport FC' }
      },
      {
        team: { name: 'AFC Fylde' }
      },
      {
        team: { name: 'FC United' }
      }
    ]
    var junk = (/\sA?FC/g)
    var newTeams = teams.map((t) => {
    return t.team.name.replace(junk, "")
    })
    console.log(newTeams)
    
    
    
2
stever 26 janv. 2019 à 19:55

Vous pouvez utiliser Array :: map () et String :: replace détecter si la chaîne que vous souhaitez remplacer se trouve à la fin à l'aide de $. Vous pouvez également utiliser String :: trim ( ) pour supprimer les espaces des deux extrémités de la chaîne résultante.

const input = [
    {team: {name: 'Newport County AFC'}},
    {team: {name: 'Southport FC'}},
    {team: {name: 'AFC Fylde'}},
    {team: {name: 'FC United'}}
];

let res = input.map(
    ({team: {name}}) => name.replace(/AFC$|FC$/, "").trim()
);

console.log(res);
2
Shidersz 26 janv. 2019 à 19:46