RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1582592
Accepted
ADodj
ADodj
Asked:2024-06-03 23:25:43 +0000 UTC2024-06-03 23:25:43 +0000 UTC 2024-06-03 23:25:43 +0000 UTC

二维数组的汇总和排序

  • 772

问题的本质是我们有一个双精度数组,其中包含每个单独移动的掷骰子过程中出现的名称和数字。您需要找到每位玩家的得分总和并显示得分最高的玩家。

例子:[[name_1, 1,2,3,4],[name_2, 2,3,6,5]]

因此它输出以下内容:[name_2,16]

const data = [
  ['name_1', 1, 2, 3, 4],
  ['name_2', 2, 3, 6, 5]
];

const main = (players_data) => {
  function alg() {
    let arr = [
      []
    ]
    for (let i = 0, i < players_data.length, i++) {
      let c = 0
      for (let j = 0, j < 5, j++) {
        if (j == 0) {
          arr.push([players_data[i][0]])
        } else {
          c = c + (10 - players_data[i][j])
        }
      }
      arr.push([c])
    }
    arr.forEach(row => row.sort(1));
  }
  return (arr[0])
};

console.log(main(data)) // expected [name_2,16]

我决定通过使用计算值创建一个新的双精度数组来尝试双精度枚举,然后尝试进行双精度排序。

javascript
  • 1 1 个回答
  • 56 Views

1 个回答

  • Voted
  1. Best Answer
    SwaD
    2024-06-03T23:47:45Z2024-06-03T23:47:45Z

    使用此脚本,您可以运行数组的数组,计算每个嵌套数组的点数,按降序对数组进行排序,并显示具有最大点数的元素(玩家)。

    const initArr = [
      ['name_1', 1, 2, 3, 4],
      ['name_2', 2, 3, 6, 5]
    ];
    
    function whoWin(arr) {
      // Преобразуем полученные данные для каждого элемента
      return arr.reduce((acc, item) => {
          // Считаем сумму очков, начиная со второго элемента
          const sum = item.reduce((sum, it, idx) => idx ? sum + it : 0, 0);
          // Возвращаем массив массивов нужного вида [name, sum]
          return [...acc, [item[0], sum]];
        }, [])
        // Сортируем по очкам(второй элемент) и возвращаем 1й элемент
        .sort((a, b) => b[1] - a[1])[0];
    }
    
    console.log(whoWin(initArr));

    如果有多个玩家具有相同的最大点数,则此代码不考虑选项。

    可能在上面的例子中,第一次reduce太多了,所以用.map方法(解决这个问题可能更符合逻辑)

    const initArr = [['name_1', 1,2,3,4],['name_2', 2,3,6,5]];
    
    function whoWin(arr) {
      // Преобразуем полученные данные для каждого элемента
      return arr.map((item) => {
        // Считаем сумму очков, начиная со второго элемента
        const sum = item.reduce((sum, it, idx) => idx ? sum + it : 0, 0);
        // Возвращаем массив нужного вида [name, sum]
        return [item[0], sum];
      })
        // Сортируем по очкам(второй элемент) и возвращаем 1й элемент
        .sort((a,b)  => b[1] - a[1])[0];
    }
    
    console.log(whoWin(initArr));

    如果您还没有掌握数组方法,这里是使用 for 循环的相同代码

    const initArr = [
      ['name_1', 1, 2, 3, 4],
      ['name_2', 2, 3, 6, 5]
    ];
    
    function whoWin(arr) {
      // Создаем новый массив
      const resultArr = [];
      // Обходим каждый элемент массива
      for (let i = 0; i < arr.length; i++) {
        // Создаем внутренний массив. Первым элементом кладем имя, вторым сумму = 0
        const sumPlayer = [arr[i][0], 0];
        // Начиная со второго элемента считаем сумму очков
        for (let j = 1; j < arr[i].length; j++) {
          // Суммируем с помощью оператор +=
          sumPlayer[1] += arr[i][j];
        }
        // Пушим полученный массив [name, sum] в результирующий
        resultArr.push(sumPlayer);
      }
      // Результирующий сортируем по очкам
      resultArr.sort((a, b) => b[1] - a[1]);
      // Возвращтаем первый элемент
      return resultArr[0];
    }
    
    console.log(whoWin(initArr));

    UPD:根据评论,我添加了一个稍微优化的函数,允许您拒绝对数组进行排序

    const initArr = [['name_1', 1,2,3,4],['name_2', 2,3,6,5]];
    
    function whoWin(arr) {
      let result = ['', 0];
      arr.forEach(item => {
        const sum = item.reduce((sum, it, idx) => idx ? sum + it : 0, 0);
        if (sum > result[1]) result = [item[0], sum];
      })
      return result;
    }
    
    console.log(whoWin(initArr));

    好吧,没有额外的变量

    const initArr = [
      ['name_1', 1, 2, 3, 4],
      ['name_2', 2, 3, 6, 5]
    ];
    
    function whoWin(arr) {
      return arr.reduce((acc, item) => {
        const sum = item.reduce((sum, it, idx) => idx ? sum + it : 0, 0);
        if (sum > acc[1]) acc = [item[0], sum];
        return acc;
      }, ['', 0]);
    }
    
    console.log(whoWin(initArr));

    • 2

相关问题

  • 第二个 Instagram 按钮的 CSS 属性

  • 由于模糊,内容不可见

  • 弹出队列。消息显示不正确

  • 是否可以在 for 循环中插入提示?

  • 如何将 JSON 请求中的信息输出到数据表 Vuetify vue.js?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5