javascript迭代算法接受数组中应拒绝的一半分数

标签 javascript arrays

我想检查我的变量是否是一个数组,以及它的元素是否包含带有“.png”或“.jpg”的子字符串。所以我写了这段代码:

let test = ['empty_250x380@3x.png',
'empty_250x380@3x.png',
'empty_250x380@3x.png',
'empty_250x380@3x.png',
'empty_250x380@3x.png','empty_250x380@3x.png']

if(Array.isArray(test))
{
   for(let n in test)
   {
     if(test[n].includes('.png') || test[n].includes('.PNG') || test[n].includes('.jpg') || test[n].includes('.JPG') )
     {
        test.splice(n,1);
     }
   } 
     console.log(test.length); // here is 3
  };

但它总是让数组的每个偶数索引通过,所以我得到了一半的分数错误。我不知道这怎么可能。你知道我该如何解决它吗?

最佳答案

迭代的问题是在拼接数组时索引从0到5。当索引到达第 3 个元素时,数组的大小变为 3,因此 test[3]test[4]test[ 5] 未定义。这就是为什么您得到的大小为 3。尝试从 5 迭代到 0,例如:

let test = ['empty_250x380@3x.png',  'empty_250x380@3x.png',  'empty_250x380@3x.png',  'empty_250x380@3x.png',  'empty_250x380@3x.png', 'empty_250x380@3x.png'];

if(Array.isArray(test)) {
  for(let n = test.length - 1; n >= 0; n--) {
    if(test[n].includes('.png') || test[n].includes('.PNG') || test[n].includes('.jpg') || test[n].includes('.JPG')) {
      test.splice(n, 1);
    }
  } 
  console.log(test.length);
};

或者,您可以使用正则表达式来减少代码:

let test = ['empty_250x380@3x.png',  'empty_250x380@3x.png',  'empty_250x380@3x.png',  'empty_250x380@3x.png',  'empty_250x380@3x.png', 'empty_250x380@3x.png'];

if(Array.isArray(test)) {
  for(let n = test.length - 1; n >= 0; n--) {
    if(/\.(png|jpg)$/i.test(test[n])) {
      test.splice(n, 1);
    }
  } 
  console.log(test.length);
};

更好的版本:

let test = ['empty_250x380@3x.png',  'empty_250x380@3x.png',  'empty_250x380@3x.png',  'empty_250x380@3x.png',  'empty_250x380@3x.png', 'empty_250x380@3x.png'];

if(Array.isArray(test)) {
  console.log(test.filter(e => ! /\.(png|jpg|svg)$/i.test(e)).length);
};

关于javascript迭代算法接受数组中应拒绝的一半分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49848666/

相关文章:

java - 突破性Java游戏-卡在框架上打印积木

javascript - 从数组中删除重复项的最简单方法,同时仍保留最后一个

javascript - 从php返回json到ajax

javascript - 如何在同一字段集中使用单选按钮和复选框?

javascript - $q.defer() 不适用于 Angular 服务

python - 在 numpy 数组中计算值发生更改之前的长度以及转换次数的最佳方法(最好是 numpythonic)?

Javascript - 用不同的值替换具有相同类的元素

Java boolean 数组,只有一个元素

javascript过滤器编辑并保存数组

从提要中读取的 JavaScript xmlhttp