【问题标题】:How can I sum all numbers 1 from a string?如何将字符串中的所有数字 1 相加?
【发布时间】:2018-11-15 20:10:33
【问题描述】:

我需要将字符串中的所有数字相加 1!

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

psum 会收到这个结果,然后我会检查

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

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

你能帮帮我吗?

【问题讨论】:

  • 这是作业吗?为什么你不能使用那些构造?除了reduce,你别无选择。这可能是任务的重点。
  • 哈哈@Carcigenicate 它确实是。太糟糕了,这是一个关于 javascript 的问题:/ 我是怎么跑到这里来的?
  • 到目前为止您尝试过什么?这听起来像是有这些限制的课堂作业。
  • 谢谢@Will,但我不能使用框架
  • 我试图将该字符串转换为int类型,所以我得到了“110010”,但我需要的是数字1的总和。我不知道再试一次! @Herohtar

标签: javascript string int


【解决方案1】:

你需要使用reduce()方法。

let input = '00110010'
let array = input.split("").map(x => parseInt(x));

let sum = array.reduce((acc, val) => {
  return acc + val;
});

console.log(sum)

【讨论】:

  • 请注意,如果您的字符串有 2 或 3,那么这些数字也会相加。根据我理解的问题,只应添加数字 1。
  • 啊,确实是@tricot。我可能误会了。
【解决方案2】:

在一个声明中:

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

console.log(psum);

【讨论】:

    【解决方案3】:

    请注意,对数字 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 将用第二个参数(空字符串)替换所有匹配项,归结为返回所有不匹配的字符。这就像双重否定:返回 notnot 1 匹配的字符。所以你只得到 1 :-) .length 会计算那些。

    split:

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

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

    带有递归函数:

    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 进行比较。这可以为假或真。此结果分别转换为 0 或 1,并添加到递归调用结果中。该递归调用计算输入其余部分中的数字 1(不包括已计算 1 的第一个字符)。

    【讨论】:

    • 谢谢@trincot
    • 不客气。如果您需要澄清其中一种解决方案,请告诉我。
    • 成功了。非常感谢您的帮助!
    • 当然...我想了解!让我知道它是如何工作的
    • 我添加了解释。
    猜你喜欢
    • 2014-05-15
    • 2022-07-22
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多