【问题标题】:array element duplicate count using convert array element to string matching the value and also get string value its possible?数组元素重复计数使用将数组元素转换为匹配值的字符串并获得字符串值是否可能?
【发布时间】:2021-01-16 13:02:08
【问题描述】:

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,2,3,5]));
console.log(count5numbers1([1,2,4,2]));
console.log(count5numbers1([2,4,54,15]));
console.log(count5numbers1([1,5,55,555]));
console.log(count5numbers1([6,3,2,1]));
console.log(count5numbers1(['notnumber,its a string']));

我得到的答案是: [1,1,0,2,6,0,0]

但预期的答案是: [1,1,0,2,6,0,不是数字]

【问题讨论】:

  • 我没有看到与“重复计数”的联系。您的代码中没有任何内容可以检测重复项。
  • m1 保存匹配返回的值,永远不会是字符串......
  • 不太清楚您要做什么。当数组中的所有元素都是字符串时,您想记录“它不是数字”吗?
  • 就像@MosheSommers 所说,String.prototype.match() 返回匹配数组或null,因此您的第一个if 条件永远不会为真。
  • 您在寻找什么?如果数组中有 any 字符串,或者数组是 all 字符串,是否要打印 NaN?

标签: javascript arrays function if-statement match


【解决方案1】:

由于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, 2, 3, 5]));
console.log(count5numbers1([1, 2, 4, 2]));
console.log(count5numbers1([2, 4, 54, 15]));
console.log(count5numbers1([1, 5, 55, 555]));
console.log(count5numbers1([6, 3, 2, 1]));
console.log(count5numbers1(['notnumber,its a string']));
.as-console-wrapper {
  max-height: 100% !important;
}

【讨论】:

    【解决方案2】:

    由于表达式 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 2018-02-11
      • 1970-01-01
      • 2021-01-14
      • 2019-02-21
      • 1970-01-01
      • 2020-04-04
      相关资源
      最近更新 更多