UNPKG

mathball

Version:

A JavaScript library for Competitive Programming

82 lines (73 loc) 2.12 kB
"use strict"; var validate = require('../validation/count'); var deepCompare = function deepCompare(var1, var2) { if ((typeof var1 === "string" || typeof var1 === "number") && (typeof var2 === "string" || typeof var2 === "number")) { return var1 === var2; } else if (Array.isArray(var1) && Array.isArray(var2)) { return var1.filter(function (val) { return var2.includes(val); }).length === var1.length && var1.length === var2.length; } else { for (var ele in var1) { if (var1.hasOwnProperty(ele) !== var2.hasOwnProperty(ele)) { return false; } else { if (!deepCompare(var1[ele], var2[ele])) { return false; } } } } return true; }; /** * Find the occurance count of a phrase * @param {string} str * @param {string} occurance */ var findStroccurance = function findStroccurance(str, occurance) { var count = 0; var flag = -1; do { flag = str.indexOf(occurance, flag + 1); if (flag !== -1) { count++; } } while (flag !== -1); return count; }; /** * Find the occurance count of a phrase * @param {object} obj * @param {string|number|object} occurance */ var findObjOccurance = function findObjOccurance(obj, occurance) { var count = 0; var keyVals = Object.keys(obj); for (var i = 0; i < keyVals.length; i++) { if (deepCompare(occurance, obj[keyVals[i]])) { //obj[keyVals[i]] === occurance count++; } } return count; }; /** * Frequency * * `count()` accepts two arguments and return the occurance of second argument in first * @param {string|number|string[]|number[]|object} arg - Accepts either a String or an Array * @param {string|number|object} occurance - The phrase or array item you want to find */ module.exports = function (arg, occurance) { validate(arg, 'count'); if (arg && arg.constructor === Array) { return arg = arg.filter(function (val) { return val === occurance; }).length; } else if (arg.constructor === Object) { return findObjOccurance(arg, occurance); } else { return findStroccurance(arg, occurance); } };