某些元素未从数组

时间:2016-05-14 03:02:46

标签: javascript arrays

我已经为字符串中的元音位置创建了一个数组现在我想要从该数组中重新获得值为-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]

3 个答案:

答案 0 :(得分:0)

简单的方法是使用 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"));

答案 1 :(得分:0)

您在正在迭代的同一splice上呼叫array。 Rememeber splice是可变的,它从原始数组中删除。因此,您的索引跟踪逻辑变得混乱。因此,您可以使用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]  

这意味着您6 index 01 index 3

答案 2 :(得分:0)

我更喜欢更简单的代码:

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;
}
相关问题