如何确定数字所属的存储桶?对于前者,我们可以说我们有0 - 20,21 - 50,51 - 80,81 - 100或等级等级为“贫穷'”,“平均'”,'好的','很棒'。是否有一种使用jquery / lodash / d3 / underscore的有效方法来找出' 45'属于' 21 - 50'斗还是“平均”'?
编辑:这是最好的方法吗?在速度方面,最小的代码。
这里有我的帮助;
// Set up your data
var range = [[0, 20], [21, 50], [51, 80], [81, 100]]
var number = 45
range.find(function(val) { return val[1] >= number })
// Returns [21, 50]
range.findIndex(function(val) { return val[1] >= number })
// Returns 1
答案 0 :(得分:3)
这应该有用......
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])
答案 1 :(得分:1)
您可以使用属性设置为"Poor"
到"Great"
的对象数组,对应于设置为属性值的数字范围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])
答案 2 :(得分:1)
D3方式使用比例尺:
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>
D3的优点在于,比例会根据范围的值数自动划分域。例如,上面的代码段有5个值(“非常差”,“差”,“平均”,“好”,“非常好”),因此34是“坏”。在下面的代码段中,仅使用3个值,34为“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>
答案 3 :(得分: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;