在underscore.js _.where中使用变量

时间:2014-01-07 07:29:26

标签: javascript jquery underscore.js

是否可以在_.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);
});

3 个答案:

答案 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});