如何在最后一次出现时删除数组中字符串的一部分

时间:2019-01-26 19:31:05

标签: javascript arrays

例如,我在下面有一个简单的数组:

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

我只想在字符串的最后部分/出现时删除给定团队名称的FCAFC子字符串。

我只能在下面提供此代码,您也可以看到here

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

但是,有一个问题,为什么?因为某些团队的名称以FCAFC开头,因此它们将被删除,而且我的方法也将字符串留有空格,这不是我想要的方式。

我的预期输出是:

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

那么我该如何实现呢?有没有办法改善代码或更好的解决方案?

3 个答案:

答案 0 :(得分:2)

您也可以查找字符串的结尾。

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);

答案 1 :(得分:2)

您可以使用Array::map()String::replace使用$检测要替换的字符串是否在结尾。另外,您可以使用String::trim()从结果字符串的两端删除空格。

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 :(得分:2)

这里是使用replace和其他正则表达式的选项

   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)