我需要对一个字符串中的所有数字1求和!
例如:“ 00110010” = 1 + 1 + 1 = 3 ...
psum将收到此结果,然后我将检查
if(psum >= 3){
return person;
}
我需要找到一种在javascript ES6中解决该问题的方法,但是不幸的是,我无法使用任何for,while或forEach循环!!!
你能帮我吗?
答案 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);