score:1

Accepted answer

you can use an array of objects with properties set to from "poor" to "great" corresponding to the range of numbers set as value of the property, array.prototype.filter()

var range = [{
  poor: [0, 20]
}, {
  average: [21, 50]
}, {
  good: [51, 80]
}, {
  great: [81, 100]
}];

var number = 45;

var res = range.filter(function(el) {
  var key = el[object.keys(el)];
  return number > key[0] && number < key[1]
});

console.log(object.keys(res[0])[0])

score:0

var ranges = [
    {
        name: 'poor',
        range: [0, 20]
    },
    {
        name: 'average',
        range: [21, 50]
    },
    {
        name: 'good',
        range: [51, 80]
    },
    {
        name: 'great',
        range: [81, 100]
    },
]
var number = 45;
var range = _.find(ranges, function (r) {
    return _.inrange(number, r.range[0], r.range[1] + 1);
}).name;

score:1

the d3 way using scales:

var scale = d3.scalequantize()
  .domain([0,100])
  .range(["very bad","bad","average","good","very good"]);

console.log(scale(34));
console.log(scale(55));
console.log(scale(91));
<script src="https://d3js.org/d3.v4.min.js"></script>

the nice thing of d3 is that the scale automatically divides the domain based on the number of values of the range. for instance, the snippet above has 5 values ("very bad","bad","average","good","very good"), and so 34 is "bad". in the snippet below, using only 3 values, 34 is "average":

var scale = d3.scalequantize()
  .domain([0,100])
  .range(["bad","average","good"]);

console.log(scale(34));
console.log(scale(55));
console.log(scale(91));
<script src="https://d3js.org/d3.v4.min.js"></script>

score:3

this should work...

var range = [[0, 20], [21, 50], [51, 80], [81, 100]]
var number = 45
var bucket = range.filter(function(a) {
  if (number >= a[0] && number <= a[1]) return a
})

console.log(bucket[0])


Related Query

More Query from same tag