JSFiddle - React, Tailwind, and code Playground

Code Test: You have an array of objects in JavaScript. Each one contains a name (a string) and ranking (a number). Write two functions, one to return the objects ordered by ranking and another to return the average ranking.

by id0

JavaScript

let dummy_array = [
  {name: "a", rank: 3},
  {name: "y4"},
  {name: "y3"},
  {name: "b", rank: 2},
  {name: "c", rank: 1},
  {name: "d", rank: 4},
  {name: "y"},
  {name: "e", rank: 6},
  {name: "f", rank: 5},
  {name: "g", rank: 7},
  {name: "x", rank: 0},
  {name: "x2", rank: -10},
  {name: "y1"},
  {name: "y2"},
  {name: "y5"}
];

/**
 * Sort array
 * Pure alternative:
 * `return array.sort((a, b) => b[param] - a[param]);`
 * @param {Array} array
 * @param {String} param
 * @param {String} [order="desc"]
 * @example
 * f_sort([{name: "b", rank: 2}, {name: "x"}, {name: "a", rank: 1}], "rank") // Returns: [{name: "a", rank: 1}, {name: "b", rank: 2}, {name: "x"}]
 * @returns {Array|Boolean} Returns sorted array or false
 */
function f_sort(array, param, order = "desc") {
  // Make checks
  if (!Array.isArray(array) || typeof param === "undefined") {
    return false;
  }
  if (array.length < 1) {
    return array;
  }

  return array.sort((a, b) => {
    // Process objects without suitable "param"
    if (!Number.isFinite(a[param])) {
      return 1;
    }

    return order === "desc"
      ? b[param] - a[param]
      : a[param] - b[param];
  });
}

console.log("sort:", f_sort(dummy_array, "rank"));

/**
 * Get average number
 * Pure alternative:
 * `return array.reduce((p, c) => p + c[param], 0) / length;`
 * @param {Array} array
 * @param {String} param
 * @example
 * f_sort([{name: "b", rank: 2}, {name: "x"}, {name: "a", rank: 1}], "rank") // Returns: 1.5
 * @returns {Number|Boolean} Returns average number or false
 */
function f_average(array, param) {
  // Make checks
  if (!Array.isArray(array) || typeof param === "undefined") {
    return false;
  }
  if (array.length < 1) {
    return 0;
  }

  let length = array.length;
  let sum = array.reduce((p, c) => {
    // Omit objects without suitable "param"
    if (!Number.isFinite(c[param])) {
      --length;
      return p + 0;
    }

    return p + c[param];
  }, 0);

  return sum /...