【问题标题】:Array of objects - return objects by order & return average ranking对象数组 - 按顺序返回对象并返回平均排名
【发布时间】:2019-07-29 07:47:12
【问题描述】:

这是一道练习题。

说明

您在 JavaScript 中有一个对象数组。每个都包含一个名称(一个字符串)和排名(一个数字)。

编写两个函数,一个返回按排名排序的对象,另一个返回平均排名。

我已经对其进行了排序,但还需要找到平均排名。

代码

let obj = [{name: "bob", ranking: 2}, {name: "rob", ranking: 3}, {name: "cob", ranking: 1}];

const output = obj
    .sort((a, b) => a - b);

function avgRanking(num) {
  let sum = obj.reduce((previous, current) => current += previous);
  let avg = sum / obj.ranking.length;
  return avg
}

console.log(output); 
console.log(avgRanking()); // NaN

我做错了什么?

【问题讨论】:

  • 为什么你只能得到排名而不是整个对象?
  • 你说你想要一个函数来返回按排名排序的对象,你的函数就是这样做的。所以你不是问如何解决它,你只是要求澄清对吧?
  • 您的帖子中没有一个问题(标记)。这听起来更像是老师或面试时给出的练习。
  • 你是对的,编辑以反映这一点

标签: javascript arrays sorting object


【解决方案1】:

.sort() 对数组进行排序,。如果您从一个对象数组开始并在其上调用.sort(),则该数组仍将是一个对象数组,只是(可能)以不同的顺序排列。

如果您想要一个仅包含排名的排序数组,您需要.map 来提取值(排序之前或之后)。您还应该为数组使用更好的变量名称 - 它是一个数组,而不是普通对象,所以也许将其命名为 arrusers(或者更准确地描述集合的名称),否则有一个很好的混淆的可能性:

const users = [{name: "bob", ranking: 2}, {name: "rob", ranking: 3}, {name: "cob", ranking: 1}];

const output = users
  .map(obj => obj.ranking)
  .sort((a, b) => a - b);

console.log(output);

【讨论】:

  • ... 甚至更好的 usersplayers 或任何有意义的东西
猜你喜欢
  • 2015-09-10
  • 2015-07-06
  • 2023-02-10
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
相关资源
最近更新 更多