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 /...