如何解决用Javascript将ForLoop转换为ForEach
我正在练习Hackerrank JavaScript问题。我找到了一个名为Compare the triplets
的测试。这是问题所在:
a = [1,2,3]
b = [3,1]
For elements *0*,Bob is awarded a point because a[0] .
For the equal elements a[1] and b[1],no points are earned.
Finally,for elements 2,a[2] > b[2] so Alice receives a point.
The return array is [1,1] with Alice's score first and Bob's second.
我找到了这样的解决方案:
let a = [17,28,30];
let b = [99,16,8];
function compareTriplets(a,b) {
let scoreboard = [0,0];
for (let i = 0; i < a.length; i++) {
if (a[i] > b[i]) scoreboard[0]++
else if (a[i] < b[i]) scoreboard[1]++
}
return scoreboard
}
compareTriplets(a,b)
我想将ForLoop转换为ForEach
方法。但是我找不到做到这一点的方法。
解决方法
let a = [17,28,30];
let b = [99,16,8];
function compareTriplets(a,b) {
let scoreboard = [0,0];
a.forEach((element,i) => {
if (element > b[i]) scoreboard[0]++
else if (element < b[i]) scoreboard[1]++
});
return scoreboard
}
compareTriplets(a,b)
,
这不是您要的,但让我向您展示一些东西:
public static void main(String[] args) {
String input = "stuff\n blah\n--payload {'meh': 'kar\n'}";
// Wanted output: Output: "stuff blah --payload {'meh': 'kar\n'}"
String regexPayload = "--payload\\s[^\\}]+\\}";
Matcher matcherExtractPayload = Pattern.compile(regexPayload,Pattern.DOTALL).matcher(input);
Matcher matcherReplaceWithTag = Pattern.compile(regexPayload).matcher(input);
String tag = "#PAYLOAD#";
String taggedPayload = "EMPTY";
String payLoad = "NO_PAYLOAD_FOUND";
if(matcherExtractPayload.find()) {
payLoad = matcherExtractPayload.group();
taggedPayload = matcherReplaceWithTag.replaceFirst(tag);
}
String removedNewline = Pattern.compile("\n").matcher(taggedPayload).replaceAll("");
String restoredPayload = removedNewline.replaceFirst(tag," " + payLoad);
System.out.println(restoredPayload); // Output: "stuff blah --payload {'meh': 'kar\n'}"
}
或更小的噪音:
function compareTriplets(a,b) {
return [
(a[0] > b[0]) + (a[1] > b[1]) + (a[2] > b[2]),(a[0] < b[0]) + (a[1] < b[1]) + (a[2] < b[2])
]
}
更简单,更快,更短。
我的意思是,它的字面意思是“比较三胞胎”。没有任何动态长度或任何东西。而且循环很短。您可以轻松unroll the loop。
function compareTriplets([a,b,c],[d,e,f]) {
return [
(a > d) + (b > e) + (c > f),(a < d) + (b < e) + (c < f)
]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。