如何将字符串中的所有数字1相加?

时间:2018-11-15 20:10:34

标签: javascript string int

我需要对一个字符串中的所有数字1求和!

例如:“ 00110010” = 1 + 1 + 1 = 3 ...

psum将收到此结果,然后我将检查

if(psum >= 3){
  return person;
}

我需要找到一种在javascript ES6中解决该问题的方法,但是不幸的是,我无法使用任何for,while或forEach循环!!!

你能帮我吗?

3 个答案:

答案 0 :(得分:0)

请注意,将数字1相加就等于对数字1进行计数,这是以下解决方案以不同方式进行的操作:

使用match

您可以使用正则表达式/1/g

var p = "00110010";
var psum = (p.match(/1/g) || []).length;

console.log(psum);

match返回与模式1匹配的子字符串数组。 /仅分隔此正则表达式,而g表示应检索所有匹配项(全局)。因此,返回数组的长度对应于输入中1的数量。如果根本没有匹配项,那么match将返回null,因此没有.length属性。要解决这个问题,|| []将检查该null(在布尔表达式中是虚假的),因此将使用[]而不是null

使用replace

这是一个相似的原理,但是通过匹配非1个字符并将其删除:

var p = "00110010";
var psum = p.replace(/[^1]/g, "").length;

console.log(psum);

[^1]的意思是:一个不为1的字符。replace将用第二个参数(空字符串)替换所有匹配项,这归结为返回所有不匹配的字符。这就像一个双重否定:返回 not not 1 不匹配的字符。因此,您只得到1 :-) .length会计算这些。

使用split

var p = "00110010";
var psum = p.split("1").length - 1;

console.log(psum);

split将字符串拆分为不具有给定子字符串(“ 1”)的子字符串数组。因此,即使根本没有“ 1”,您也会得到一个这样的子字符串(整个字符串)。这意味着通过获取长度,我们应该将其减少1以得到1s的数量。

具有递归功能:

var p = "00110010";
var count1 = p => p.length && ((p[0] == "1") + count1(p.slice(1)));
var psum = count1(p);

console.log(psum);

此处介绍了功能count1。它首先检查给定的字符串 p 是否为空。如果是这样,length为零,并返回该值。如果不为空,则将第一个字符与1进行比较。可以为false或true。该结果分别转换为0或1,并添加到递归调用结果中。该递归调用对其余输入中的数字1进行计数(不包括已经对1进行计数的第一个字符)。

答案 1 :(得分:0)

您需要使用reduce()方法。

{
  orders {
    id
    description
    name
    status
  }
}

答案 2 :(得分:0)

在一个陈述中:

let psum = "00110010".split('').reduce((t, n) => {return t + parseInt(n)}, 0);

console.log(psum);