2016-05-14 4 views
0

я создал массив для позиции гласных букв в строке теперь я хочу reomve всех элементов, которые имеют значение -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]

+0

Как насчет циклического возврата назад: 'for (var i = vowelp.length - 1; i> = 0; i -)' – Andy

+0

@Shubham - что вы передаете как str? –

+0

translatePigLatin ("согласный"); –

ответ

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"));

+0

его work.but почему мой не работает –

0

Вы звоните splice на том же array, вы повторяете. Сплав 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] 

, который означает, что вы имеете 6 на index 0 и 1 в index 3

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; 
} 
+1

thankyou @daniel его большой –

Смежные вопросы