过滤数组中的数据

时间:2018-02-12 21:38:02

标签: javascript arrays

我在表格中有一个示例元素:

  

zxcdsa.com/photo-277590-30x24.jpeg

     

zxcdsa.com/photo2-254654.png

我想拒绝其名称(el.src)中包含例如字符串的元素。 30x30到350x350。我怎么能得到这个效果? 使用以下方法过滤元素:

var newArray = someImages.filter(function (el) {
 const min = 400;
 const max = 700;
 const delimiter = 'x';
return el.width >= 400 ||
 el.class.indexOf('post-image') > -1 ||
 el.src.match( /\d+x\d+/ )[ 0 ]
   .split( delimiter )
   .every( ( number ) => {
     return number >= min && number <= max;
   });
 ....
});

match()找不到该项时,此代码无效。

示例:

  • 29x200 =&gt;拒绝
  • 200x220 =&gt;接受
  • 没有YYxYY =&gt;接受

2 个答案:

答案 0 :(得分:1)

.match()找不到匹配项时,它会返回null,而不是数组,因此您无法使用[0]对其进行索引。因此,您需要将其分解为变量赋值,测试它不为空,其余部分。

您还可以在正则表达式中使用捕获组,以避免必须调用split()

var newArray = someImages.filter(function (el) {
  return el.width >= 400 ||
    el.class.indexOf('post-image') > -1 ||
    ((m = el.src.match( /(\d+)x(\d+)/ )) && 
      [m[1], m[2]].every( number => number >= min && number <= max))
    ....
});

答案 1 :(得分:0)

认为你让自己变得困难。

逻辑上,将字符串拆分为数组,然后获取数字,如果它们可被10整除,则允许,如果不能,则禁止