【问题标题】:Compare Object Property Keys with Object Property Values in Array, Return "Total Points"将对象属性键与数组中的对象属性值进行比较,返回“总点数”
【发布时间】:2019-05-19 20:14:21
【问题描述】:

链接到Codewars kata。基本上,据我了解:

  • 如果属性键(x)大于属性值(y),则points加3分。

  • 如果属性键(x)小于属性值(y),给points加0分。

  • 如果属性键 (x) 等于属性值 (y),则将 1 点添加到 points

我需要遍历每个单独的属性,以将 x 值与 y 值进行比较。但是我正在尝试的方法不起作用:

function points(games) {

  let points = 0;

  for (let key in games) {
    let item = games[key];
    let x = item[0];
    let y = item[1];
    //compare x values against y values in items
    if (x > y) {
      points += 3;
    }
    if (x < y) {
      points += 0;
    }
    if (x === y) {
      points += 1;
    }
  }
  return points;
}

console.log(points(["1:0", "2:0", "3:0", "4:0", "2:1", "3:1", "4:1", "3:2", "4:2", "4:3"]));

这是返回 0。

如何遍历数组中的每个属性以在每个单独的属性中进行比较

编辑 - 将字符串拆分为数组进行比较后,我仍然不明白如何比较数组中的 x 值和 y 值:

function points(games) {
  let points = 0;

  for (let i = 0; i < games.length; i++) {
    let properties = games[i].split();

    if (properties[0] > properties[1]) {
      points += 3;
    }
    if (properties[0] < properties[1]) {
      points += 0;
    }
    if (properties[0] === properties[1]) {
      points += 1;
    }
  }
  return points;
}

【问题讨论】:

  • 您传入的是由冒号分隔的字符串数组,而不是对象或数组。您需要拆分字符串,或传入不同的数据。
  • 哦,如果他们被{}而不是[]包围,那会是一个对象吗?
  • 它不会运行,因为那将是无效的语法。
  • 既然挑战应该是一个字符串数组,你会想知道如何在 JS 中拆分字符串。
  • @DaveNewton - 感谢您的澄清,我将重新编写我的代码。

标签: javascript arrays object properties for-in-loop


【解决方案1】:

阅读reducemap了解更多信息

function points(games) {

  return games.map(game => {
    let points = 0;
    let item = game.split(':');
    let x = item[0];
    let y = item[1];
    //compare x values against y values in items
    if (x > y) {
      points += 3;
    }
    if (x < y) {
      points += 0;
    }
    if (x === y) {
      points += 1;
    }
    return points;
  }).reduce((sum, curr) => (sum += curr),0);
}

console.log(points(["1:0", "2:0", "3:0", "4:0", "2:1", "3:1", "4:1", "3:2", "4:2", "4:3"]));

【讨论】:

  • 啊 - 所以你可以在 .map() 方法中进行整个比较 - 谢谢。
  • 他们以前的方式更容易理解 - 现在您在退货中有退货?
  • 你想把所有点的最终结果相加,比如 [3,3,3] 最终结果是 9 吗?
  • 是的,我们当然可以这样做——不过,当我们在地图中添加点并在之后返回点的总和时更容易理解。无论哪种方式,您的代码都可以工作:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 2019-04-06
  • 2013-06-08
  • 2018-02-06
相关资源
最近更新 更多