是否可以在_.js中使用变量?
我正在制作一个过滤系统,它可以获取一个对象数组,并在点击时筛选出所选对象。但是,根据所选元素,要过滤的对象是不同的,所以我想使用_.js来过滤使用_.where
传递给它的变量。硬编码值可以很好地工作,但是当用副本变量替换时,它会弹出一个空白数组。
var user_filters = user_array;
var filtered_text;
$('.allFilters li').click(function () {
var $this = $(this);
var selected_filter = $this.siblings('a').text();
selected_filter = selected_filter.toLowerCase();
var filters = $this.attr('data-filter-value');
filters = '"'+filters+'"';
selected_filter = selected_filter;
console.log(selected_filter, filters);
user_filters = _.where(user_filters, {selected_filter: filters});
console.log (user_filters);
});
答案 0 :(得分:2)
有一种方法可以在调用 where 时使用变量,即创建 where 所需的对象文字。这可以使用下划线函数_.object来完成,它可以是一个键数组,一个值数组或一个键值对数组。
在你的例子中,你可以做到:
user_filters = _.where(user_filters, _.object([[selectedFilter, filters]]));
答案 1 :(得分:0)
我认为你正在寻找这样的东西:
user_filters = user_filters.filter(function(item) {
return item[selected_filter] === filters;
});
(并忽略filters = '"'+filters+'"';
行)
或者,使用Underscore的filter
:
user_filters = _.filter(user_filters, function(item) {
return item[selected_filter] === filters;
});
答案 2 :(得分:0)
如果用方括号括起来,可以使用变量:
在您的情况下,您可以这样做:
var selected_filter = $this.siblings('a').text();
selected_filter = selected_filter.toLowerCase();
_.where(user_filters, {[selected_filter]: filters});