繁体   English   中英

Javascript 中的隐蔽 ForLoop 到 ForEach

[英]Covert ForLoop to ForEach in Javascript

我在练习Hackerrank JavaScript 问题。 我发现了一项名为“ Compare the triplets测试。 这就是问题:

a = [1, 2, 3]
b = [3, 2, 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)

这不是你要求的,但让我告诉你一些东西:

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])
  ]
}

或者,更少的噪音:

function compareTriplets([a, b, c], [d, e, f]) {
  return [
    (a > d) + (b > e) + (c > f),
    (a < d) + (b < e) + (c < f)
  ]
}

更简单,更快,也更短。

我的意思是,它的字面意思是“比较三元组”。 没有任何动态长度或其他东西; 并且循环很短。 您可以轻松展开循环

 let a = [17, 28, 30]; let b = [99, 16, 8]; function compareTriplets([a, b, c], [d, e, f]) { return [ (a > d) + (b > e) + (c > f), (a < d) + (b < e) + (c < f) ] } console.log(compareTriplets(a, b));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM