我有以下数组:
[{value: 0, label: 'January'}, ...
{value: 11, label: 'December'}]
所有月份我需要按季度(1,2,3,4)过滤,所以当我有第1季需要月份1月,2月,3月。
是否可以在某个范围内过滤此数组? 我试过这个:
console.log(_(months).filter(function(x) {
return x.value >= 0 && x.value <= 2
}));
当然我用变量替换0和2,这只是一个例子。你能告诉我为什么这不起作用吗?它打印lodash包装,没有过滤几个月。我也尝试添加结束函数* .values(),但也不起作用。
我也在我的项目时刻库中使用,所以如果存在简单的解决方案,那么它也可以。感谢
答案 0 :(得分:1)
value()
功能需要在filter
而非console.log()
months = [{
value: 0,
label: 'January'
},
{
value: 11,
label: 'December'
}
];
console.log(months);
console.log(_(months).filter(function(x) {
return x.value >= 0 && x.value <= 2
}).value());
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.core.min.js"></script>
答案 1 :(得分:1)
您的对象数组看起来过于复杂。您可以使用一个月份名称的简单数组(索引等于月份数):
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
function get_Q(n) {
return months.filter(function(m, i) {return i >= 3*(n-1) && i < 3*n})
}
console.log(get_Q(1)+'');
console.log(get_Q(2)+'');
console.log(get_Q(3)+'');
console.log(get_Q(4)+'');
如果无法简化阵列:
var months = [
{value:0, label:'Jan'},
{value:1, label:'Feb'},
{value:2, label:'Mar'},
{value:3, label:'Apr'},
{value:4, label:'May'},
{value:5, label:'Jun'},
{value:6, label:'Jul'},
{value:7, label:'Aug'},
{value:8, label:'Sep'},
{value:9, label:'Oct'},
{value:10, label:'Nov'},
{value:11, label:'Dec'}
];
function get_Q(n) {
return months.filter(function(m) {
return m.value >= 3 * (n - 1) && m.value < 3 * n
})
}
console.log(get_Q(1));
console.log(get_Q(2));
console.log(get_Q(3));
console.log(get_Q(4));