如何解决数组元素重复计数使用转换数组元素到与值匹配的字符串,并且还可能获取字符串值?
function count5numbers1(arr){
const m1 = arr.toString().match(/[5]/g);
if (typeof m1 === 'string' || m1 instanceof String){
return "it's not a number";
}else if(m1 === null){
return 0;
}else{
return m1.length;
}
}
console.log(count5numbers1([1,2,5,43]));
console.log(count5numbers1([1,3,5]));
console.log(count5numbers1([1,4,2]));
console.log(count5numbers1([2,54,15]));
console.log(count5numbers1([1,55,555]));
console.log(count5numbers1([6,1]));
console.log(count5numbers1(['notnumber,its a string']));
我得到的答案是: [1,1,6,0]
但是预期的答案是: [1,0,不是数字]
解决方法
由于表达式arr.toString().match(/[5]/g)
仅返回“ 5”或null的数组,因此您最好在此之前检查字符串,这样(我假设您仅在检查整数-如果您也期望小数,您需要对此进行更改):
function count5numbers1(arr) {
const m = arr.toString().replace(/,/g,'');
if (isNaN(m)) {
return "it's not a number";
}
const m1 = arr.toString().match(/[5]/g);
if(m1 === null) {
return 0;
} else {
return m1.length;
}
}
,
由于String.prototype.match()
返回数组或null
,因此检查其类型是否为字符串将始终为false。
如果要查找是否包含非数字的内容,则需要检查原始数组的每个元素,而不是匹配结果。
为此,您可以使用:
arr.some(e => typeof e != 'number')
这将获取每个元素的类型,然后检查该类型是否为数字。
在您的示例中:
function count5numbers1(arr) {
const m1 = arr.toString().match(/[5]/g);
if (arr.some(e => typeof e != 'number')) {
return "it's not a number";
} else if (m1 === null) {
return 0;
} else {
return m1.length;
}
}
console.log(count5numbers1([1,2,5,43]));
console.log(count5numbers1([1,3,5]));
console.log(count5numbers1([1,4,2]));
console.log(count5numbers1([2,54,15]));
console.log(count5numbers1([1,55,555]));
console.log(count5numbers1([6,1]));
console.log(count5numbers1(['notnumber,its a string']));
.as-console-wrapper {
max-height: 100% !important;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。