如何循环遍历一个字母数组并返回数组中第一个连续的辅音字母?

How can I loop through an array of letters and return the first consecutive consonants in the array?

本文关键字:数组 第一个 连续 返回 何循环 遍历 一个 循环      更新时间:2023-09-26

我试图仅从数组中删除第一个连续辅音,因此它返回["e","l","l","o"]

arr=["h","e","l","l","o"]
vowel=["a","e","i","o","u"]
consonants=[];
for ( i in arr){
    if(vowel.indexOf(arr[i]) =-1 ) {
       consonants+=arr[i];
       arr= arr.slice(consonants.length)
    }else { return arr }   
}

我可能把你的问题解释错了,但我把它看作是"返回一个数组,所有的前导辅音被删除"。

无论如何,这似乎是正则表达式的一个很好的用例:

var arr=["h","e","l","l","o"]
// hat-tip to @minitech in the comments for improving this line...
var result = arr.join('').replace(/^[^aeiou]+/, '').split('');
console.log(result);
// [ 'e', 'l', 'l', 'o' ]

解释:

  • arr.join('')将数组转换为字符串
  • .replace(/^[^aeiou]+/, '')删除所有前导非元音字符
  • .split('')将结果转换为字符数组

在这里的循环中,

for ( i in arr){

你应该使用一个正常的for循环;for in用于遍历属性,并以任意顺序迭代。

在这里,

if(vowel.indexOf(arr[i]) =-1 )

你需要使用==来检查是否相等;=仅用于分配。(===也是一个很好的选择,对于严格相等。)

在这里的语句中,

consonant+=arr[i];

第一次将consonant从数组转换为字符串(假设consonants只是一个错别字)。如果你只使用它的length属性,这两种方法都可以,但你应该保持一致,要么用空字符串''初始化它,要么用.push()方法附加到它。

在这里的arr重赋值中,

arr= arr.slice(consonant.length)

您将丢失被枚举的原始对象,这将使您的索引对未来的迭代产生偏差。每次还将consonant.length切片,这将导致总共删除1、3、6、10等字符。最好是跳出循环,在最后执行一次切片操作。

你也应该声明你的变量,如果你还没有。总之,

var arr = ["h", "e", "l", "l", "o"];
var vowels = ["a", "e", "i", "o", "u"];
var consonants = [];
for (var i = 0; i < arr.length; i++) {
    var c = arr[i];
    if (vowels.indexOf(c) == -1) {
        consonants.push(c);
    } else {
        // using `i` in place of `consonants.length` here would work just as well
        return arr.slice(consonants.length);
    }
}

你的函数应该是这样的

arr=["h","e","l","l","o"];
vowel=["a","e","i","o","u"];
consonants=[];
for (i = 0; i < arr.length; i++){
    if(vowel.indexOf(arr[i]) == -1 ) {
       consonants.push(arr[i]);
       arr= arr.slice(consonants.length)
}else { return arr }   
}

你的for循环有点不对劲,你的常量变量在你的函数中被命名为2个不同的东西…你有常量常量

尝试数组。过滤器-像这样:

var arr=["h","e","l","l","o"],
vowel=["a","e","i","o","u"],
first_consonant_found = false;
var consonants = arr.filter(function(ele){
    if (vowel.indexOf(ele) == -1 && !first_consonant_found){
        first_consonant_found = true;
        return false;
    } else {
        return true;
    }
})