一些元素没有从数组中删除

some elements are not removed from array

本文关键字:数组 删除 元素      更新时间:2023-09-26

我已经为字符串中的元音位置创建了一个数组,现在我想从这个数组中重新调用所有值为-1的元素,但它不起作用

function translatePigLatin(str) {
  var vowelp=[];
  var newarr=str.split('');
   vowelp.push(newarr.indexOf('a'));
   vowelp.push(newarr.indexOf('e'));
   vowelp.push(newarr.indexOf('i'));
   vowelp.push(newarr.indexOf('o'));
   vowelp.push(newarr.indexOf('u'));
   var minvowel=vowelp[0];
for(var i=0;i<vowelp.length;i++) {   //looping through vowel's position array
    if(vowelp[i]==-1)  {
   vowelp.splice(i,1);
      console.log(vowelp[i]);
      }
  }
  return vowelp;
}

输入translatePigLatin("辅音");我得到的输出是[6,-1,1],但我想要[6,1]

简单的方法是使用filter()

function translatePigLatin(str) {
  var vowelp = [];
  var newarr = str.split('');
  vowelp.push(newarr.indexOf('a'));
  vowelp.push(newarr.indexOf('e'));
  vowelp.push(newarr.indexOf('i'));
  vowelp.push(newarr.indexOf('o'));
  vowelp.push(newarr.indexOf('u'));
  var minvowel = vowelp[0];
  return vowelp.filter(function(v) {
    return v != -1;
  })
}
console.log(translatePigLatin("consonant"));


在您的情况下,如果项目被删除,您需要递减i的值,否则它将跳过下一个元素。

function translatePigLatin(str) {
  var vowelp = [];
  var newarr = str.split('');
  vowelp.push(newarr.indexOf('a'));
  vowelp.push(newarr.indexOf('e'));
  vowelp.push(newarr.indexOf('i'));
  vowelp.push(newarr.indexOf('o'));
  vowelp.push(newarr.indexOf('u'));
  var minvowel = vowelp[0];
  for (var i = 0; i < vowelp.length; i++) { //looping through vowel's position array
    if (vowelp[i] == -1) {
      vowelp.splice(i, 1);
      i--;
      console.log(vowelp[i]);
    }
  }
  return vowelp;
}
console.log(translatePigLatin("consonant"));


使用带有阵列的map()filter()可以使其更加简单

function translatePigLatin(str) {
  return ['a', 'e', 'i', 'o', 'u'].map(function(v) {
    return str.indexOf(v);
  }).filter(function(v) {
    return v != -1;
  });
}
console.log(translatePigLatin("consonant"));

您正在迭代的同一个array上调用splice。Rememeber剪接是可变的,它会从原始数组中删除。因此,您的索引跟踪逻辑变得一团糟。因此,您可以使用delete[i](它不会弄乱索引并创建一个空的)

 function translatePigLatin(str) {
  var vowelp=[];
  var newarr=str.split('');
  vowelp.push(newarr.indexOf('a'));
  vowelp.push(newarr.indexOf('e'));
  vowelp.push(newarr.indexOf('i'));
  vowelp.push(newarr.indexOf('o'));
  vowelp.push(newarr.indexOf('u'));
  var minvowel=vowelp[0];
  for(var i=0;i<vowelp.length;i++) {   //looping through vowel's position array
    if(vowelp[i]==-1)  {
        delete vowelp[i];
    }
  }
  return vowelp;
}

  console.log(translatePigLatin("consonant")); //prints [6, 3: 1]  

这意味着您在index 0上有6,在index 3上有1

我更喜欢一个更简单的代码:

function translatePigLatin(str) {
  var vowelp = [];
  var vowels = ['a','e','i','o','u'];
  for (var i = 0; i < vowels.length; i++) {
    var index = str.indexOf(vowels[i]);
    if (index != -1) {
        vowelp.push(index);
    }
  }
  return vowelp;
}