我可以在过滤器方法中使用变量吗?

时间:2019-07-02 20:49:17

标签: javascript vue.js filtering

我可以将值分配给变量,然后在js过滤器方法中使用这些变量吗?

我尝试使用分配给两个变量的本地数据,然后在我的过滤器方法中使用这些变量。我正在尝试此操作,因为我想使用几个不同的过滤器(键和值,例如age:5)过滤数组。我有一个播放器阵列,您可以选择一个或多个选项来过滤播放器。用户选择过滤器时,它们将保存在过滤器[]中。我想遍历滤镜[]并将每个滤镜应用于一组播放器。第一个过滤器需要与所有播放器一起使用在阵列上,然后每个后续的过滤器都可以在过滤后的阵列上使用(使每次迭代变小)。我的代码仅显示了我最初的第一个过滤器方法。

applyFirstFilter() {
      let filterValue = this.filters[0];
      let filterKey = this.checkValue(filterValue);
      console.log("key: " + filterKey + ", filterValue: " + filterValue);

      //loop through filters[]
      // apply first filter to allPlayers and assign to displayPlayerArray
      this.displayedPlayerArray = this.allPlayersArray.filter(player => player.filterKey === filterValue);
      console.log("displayed array: " + this.displayedPlayerArray);

      // apply all remaining filters to displayPlayerArray

      },

控制台显示filterValue和filterKey具有我期望它们具有的值。我所做的所有研究都显示了固定的示例,例如:

var ages = [32, 33, 16, 40];

function checkAdult(age) {
  return age >= 18;
}

function myFunction() {
  this.localArray = ages.filter(checkAdult);
} 

到目前为止,我的filter方法不会影响我的数组。我真的不确定这是否切实可行。 :/有什么想法吗?

2 个答案:

答案 0 :(得分:0)

要回答最基本的问题:是的,您可以在过滤器中使用变量。以年龄过滤为例,您可以使用变量而不是固定数字:

var ages = [32, 33, 16, 40];

function checkAge(age, minAge) {
  return age >= minAge;
} 

function myFunction(minAge) {
  return ages.filter((age) => checkAge(age, minAge));
} 

myFunction(18); // returns [32, 33, 40];
myFunction(30); // returns [40]

现在,很难弄清楚为什么您的代码无法正常工作。为此,我们需要更多地了解allPlayersArraythis.filters

的结构

答案 1 :(得分:0)

这似乎不正确:

this.displayedPlayerArray = this.allPlayersArray.filter(player => player.filterKey === filterValue);

player.filterKey将查找名称为filterKey的属性,它将不使用变量filterKey

我猜你想要这样的东西,用方括号:

this.displayedPlayerArray = this.allPlayersArray.filter(player => player[filterKey] === filterValue);

除此之外,我还需要示例数据来进一步调试。