Angular 如何仅对末尾有数字的字符串进行切片
我陷入了困境。我必须将字符串中的最后两个字符切分,但只能切分包含数字的字符串。 我尝试使用“nome”:element.nome.slice(0,-2),我需要的是某种验证。但我不知道怎么做 这是我的密码: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
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
});
})