微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数组元素重复计数使用转换数组元素到与值匹配的字符串,并且还可能获取字符串值?

如何解决数组元素重复计数使用转换数组元素到与值匹配的字符串,并且还可能获取字符串值?

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 举报,一经查实,本站将立刻删除。