2016-05-14 26 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

+0

其working.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] 

這意味着你必須6index 01index 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它的偉大 –