简体   繁体   English

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

[英]using variables in underscore.js _.where

is it possible to use variables with .where in _.js? _.js中的.where是否可以使用变量?

I am making a filtering system that gets an array of objects and filters out the selected objects on click. 我正在制作一个过滤系统,该系统获取对象数组并在单击时过滤掉所选对象。 However, the objects to be filtered are different based on the elements chosen, so I would like to use _.js to filter variables passed to it with _.where 但是,要过滤的对象根据所选元素的不同而不同,因此我想使用_.js过滤通过_.where传递给它的变量。

Hardcoded values work perfectly, but when replaced with replica variables, it shoots out a blank array. 硬编码的值可以很好地工作,但是当替换为副本变量时,它将射出一个空白数组。

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

There is a way to use variables when calling where , which is to create an object literal which where expects. 有一种在调用where时使用变量的方法,即创建一个where期望的对象文字。 This can be done using the underscore function _.object which can take either an array of keys and an array of values or an array of key value pairs. 这可以使用下划线函数_.object完成,该函数可以采用键数组和值数组或键值对数组。

In your example you could have done: 在您的示例中,您可以完成以下操作:

user_filters = _.where(user_filters, _.object([[selectedFilter, filters]]));

I think you're looking for something like this: 我认为您正在寻找这样的东西:

user_filters = user_filters.filter(function(item) {
  return item[selected_filter] === filters;
});

(and leave out the filters = '"'+filters+'"'; line) (并省略filters = '"'+filters+'"';行)

Or, using Underscore's filter : 或者,使用下划线的filter

user_filters = _.filter(user_filters, function(item) {
  return item[selected_filter] === filters;
});

Variables can be used if surrounded them by square brackets: 如果变量用方括号括起来,则可以使用它们:

In your case you can do this: 在您的情况下,您可以执行以下操作:

var selected_filter = $this.siblings('a').text();
    selected_filter = selected_filter.toLowerCase();

_.where(user_filters, {[selected_filter]: filters});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM