判断号码所属的桶
Determine the bucket to which a number belongs to
如何判断一个号码属于哪个桶?例如,假设我们有桶 0 - 20、21 - 50、51 - 80、81 - 100 或等效等级 'Poor'、'Average'、'Good'、'Great'.有没有一种有效的方法可以使用 jquery/lodash/d3/underscore 来找出“45”属于“21 - 50”桶还是 'Average'?
编辑:这是最好的方法吗?在速度方面,代码最少。
这是我得到很多帮助的结果;
// 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
这应该有效...
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])
您可以使用属性设置为从 "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])
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 个值("very bad"、"bad"、"average"、"good"、"very good"),因此 34 是 "bad" .在下面的代码片段中,仅使用 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>
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;
如何判断一个号码属于哪个桶?例如,假设我们有桶 0 - 20、21 - 50、51 - 80、81 - 100 或等效等级 'Poor'、'Average'、'Good'、'Great'.有没有一种有效的方法可以使用 jquery/lodash/d3/underscore 来找出“45”属于“21 - 50”桶还是 'Average'?
编辑:这是最好的方法吗?在速度方面,代码最少。
这是我得到很多帮助的结果;
// 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
这应该有效...
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])
您可以使用属性设置为从 "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])
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 个值("very bad"、"bad"、"average"、"good"、"very good"),因此 34 是 "bad" .在下面的代码片段中,仅使用 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>
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;