JavaScript筛选器返回空数组

3
我正在使用数组的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属性中是否存在选定的值,并仅返回符合过滤器条件的元素的类名。循环内的控制台日志显示了正确的元素,但由于某种原因,在循环外返回了一个空数组。我是否错误地使用了过滤方法?


3
你的 isSelected 方法没有返回任何值(undefined)。 - A. Wolff
1个回答

2

你的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;
    }

过滤函数与类似于map、reduce等函数的作用不同,它只是通过检查条件并返回true或false来减小数组的大小。如果您想要一个仅包含类的数组,可以在过滤后使用map。

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

它是否过滤了您的数组,但在您只想要类时返回了整个元素?添加一条注释,在过滤后执行映射以获取类名数组。 - IrkenInvader

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接