Angular 如何仅对末尾有数字的字符串进行切片

Angular 如何仅对末尾有数字的字符串进行切片,angular,typescript,match,slice,Angular,Typescript,Match,Slice,我陷入了困境。我必须将字符串中的最后两个字符切分,但只能切分包含数字的字符串。 我尝试使用“nome”:element.nome.slice(0,-2),我需要的是某种验证。但我不知道怎么做 这是我的密码: this.aux3.forEach(element => { this.novasColecoes.push({ "produtos": element.produtos, &quo

我陷入了困境。我必须将字符串中的最后两个字符切分,但只能切分包含数字的字符串。 我尝试使用“nome”:element.nome.slice(0,-2),我需要的是某种验证。但我不知道怎么做

这是我的密码:

      this.aux3.forEach(element => {        
        this.novasColecoes.push({
          "produtos": element.produtos,
          "nome": element.nome.slice(0,-2),          
          "referencia": element.referencia,
          "selecionado": false          
        });        
      })
像这样的

// new function
 function isNumber(val) {
   return !isNaN(val);
  }

// You foreach

  this.aux3.forEach(element => { 
    let temp = element.nome;
    if(isNumber( temp )){
      temp = element.nome.slice(0,-2);
    }
        this.novasColecoes.push({
          "produtos": element.produtos,
          "nome": temp,          
          "referencia": element.referencia,
          "selecionado": false,
      
        });        
      })
你可以使用正则表达式

const hasNumber = /\d/;

this.aux3.forEach(element => {        
    this.novasColecoes.push({
        "produtos": element.produtos,
        "nome": hasNumber.test(element.nome) ? element.nome.slice(0,-2) : element.nome,
        "referencia": element.referencia,
        "selecionado": false          
    });        
})

我将提出以下单线解决方案:

element.nome.split('').some(b => b.match(/\d/)) ? element.nome.slice(0,-2) : element.nome
首先使用split拆分字符串,这意味着我们得到一个字符数组:

"test123".Split('');
// becomes
let splitString = ['t','e','s','t','1','2','3'];
然后,我们可以在新数组上使用“some”数组函数。如果某些(任何)条件为真,则返回真布尔值

在我们的条件下,我们使用正则表达式(RegExp)。“/\d/”此RegExp的计算结果为“包含一个数字”。这就是我们过滤数字的方法

// "match" returns true for 1, 2 and 3, so "some" returns true
var containsDigit = splitString.some(s => s.match(/\d/))
然后我们使用三元运算符,如果条件为真,我们返回“element.nome.slice(0,-2)”,否则我们返回未修改的“element.nome”

适用于您的示例:

this.aux3.forEach(element => {        
        this.novasColecoes.push({
          "produtos": element.produtos,
          "nome": element.nome.split('').some(n => n.match(/\d/)) ? element.nome.slice(0,-2) : element.nome,          
          "referencia": element.referencia,
          "selecionado": false          
        });        
      })

请考虑修改这个问题中的代码,以便构成一个当它落入独立IDE时,清楚地显示出你所面临的问题。这将允许那些想要帮助您的人立即着手解决问题,而无需首先重新创建问题。它将使您得到的任何答案都可以根据定义良好的用例进行测试。我曾想过使用三元运算符,但每次尝试都没有成功。非常感谢你!非常感谢你的帮助,我真的很感谢你的解释。它帮助我理解了如何处理这个问题!
this.aux3.forEach(element => {        
        this.novasColecoes.push({
          "produtos": element.produtos,
          "nome": element.nome.split('').some(n => n.match(/\d/)) ? element.nome.slice(0,-2) : element.nome,          
          "referencia": element.referencia,
          "selecionado": false          
        });        
      })