Javascript筛选器返回空数组

Javascript filter returning empty array

本文关键字:数组 返回 筛选 Javascript      更新时间:2023-09-26

我使用的是array.protoype.filter方法,它返回的是一个空数组。

   function isSelected(value){
      var tagString = $(value).attr('class');
      $.each($(brandDrop.selections), function(index, brand) {
        if(tagString.indexOf(brand) >= 0) {
          console.log(tagString);
          return tagString;
        }
      });
    }
    var products = [];
    $.each($('.products li'), function(index, product){
      products.push(product);
    });
    var brandFiltered = products.filter(isSelected);
    console.log(brandFiltered);

以下是循环内tagstring和循环外brandFiltered的控制台输出:

AugustaCollection,Crib,publishSK,simmons,simmons-kids,wood
cribs:2058 BellanteCollection,Crib,publishSK,simmons-kids,wood
cribs:2058 BelmontCollection,Crib,publishSK,simmons-kids,wood
cribs:2082 []

此功能通过选择复选框来触发。这个过滤器的目的是获取一个html元素数组,检查它们的class属性是否存在所选值,并只返回符合过滤器条件的元素的类名。循环中的控制台日志显示了正确的元素,但由于某种原因,在循环外返回了一个空数组。我是否错误地使用了筛选方法?

您的return tagString;行向$.each函数返回一个结果,而您的isSelected函数当前没有返回任何结果。

您可以编辑该函数以执行检查,并在找到字符串时返回true。

   function isSelected(value){    
      var tagString = $(value).attr('class');
      var foundString = false;
      $.each($(brandDrop.selections), function(index, brand) {
        if(tagString.indexOf(brand) >= 0) {
          console.log(tagString);
          foundString = true;
        }
      });
      return foundString;
    }

Filter的功能与map不同,它只用于通过检查条件并返回true或false来减小数组的大小。如果你只想有一个类的数组,你可以在fitler之后映射。

brandFiltered = brandFiltered.map(function(x){ return $(x).attr('class'); });