javascript 我需要创建一个函数,它接受一个字符串数组,并返回一个只有非元音开头的字符串的数组

bvk5enib  于 2023-05-05  发布在  Java
关注(0)|答案(7)|浏览(200)

写一个函数removeVowelKeys,它接受一个字符串keys数组,并返回一个不以元音(aeiouy)开头的keys数组。字母大小写无关紧要。

示例:

removeVowelKeys(['alarm', 'chip', 'isValid', 'Advice', 'onClick']); // ['chip']

这是我的attmpt这是最大的我可以得到它:

function removeVowelKeys(keys) {
  let result = [];
  for (let i=0;i<=keys.length;i++){
    if (keys[i][0]!= 'a'||keys[i][0]!= 'e'||keys[i][0]!= 'i'||keys[i][0]!= 'o'||keys[i][0]!= 'u'||keys[i][0]!= 'y'){
      result.push(keys[i])
    }
  }
  return result;
}
kninwzqo

kninwzqo1#

这里有另一个解决方案,以防任何人想要使用正则表达式。它仍然循环遍历键并获取每个传入参数的第一个字符,但会根据元音对其进行检查。

function removeVowelKeys(keys) {
  let result = [];
  
  for (let i = 0; i <= keys.length-1; i++) {
     if(!keys[i][0].match(/[aeiuoy]/i)){
       result.push(keys[i])
     }
  }
  return result;
}

console.log(removeVowelKeys(['alarm', 'chip', 'isValid', 'Advice', 'onClick']));
4sup72z8

4sup72z82#

这种情况的问题是:

if (keys[i][0]!= 'a'||keys[i][0]!= 'e'||keys[i][0]!= 'i'||keys[i][0]!= 'o'||keys[i][0]!= 'u'||keys[i][0]!= 'y')

它可以匹配任何字母表。您正在执行OR检查。以e为例,进行一次空运行。这将是第一个条件。a将通过第二个条件。如果表达式中的任何一个为真,则整个表达式返回真。

function removeVowelKeys(keys) {
  let result = [];
  for (let i=0;i<keys.length;i++){
    if (keys[i][0].toLowerCase()!= 'a'&&keys[i][0].toLowerCase()!= 'e'&&keys[i][0].toLowerCase()!= 'i'&&keys[i][0].toLowerCase()!= 'o'&&keys[i][0].toLowerCase()!= 'u'&&keys[i][0].toLowerCase()!= 'y'){
      result.push(keys[i])
    }
  }
  return result;
}

console.log(removeVowelKeys(['alarm', 'chip', 'isValid', 'Advice', 'onClick']));

除此之外,您希望代码运行到i<keys.length。数组从0开始。为了处理大小写,你需要像上面那样降低大小写。

wlp8pajw

wlp8pajw3#

你可以filter数组,并在每一个项目检查,如果项目startsWith一个元音字符从数组与some方法。

const vowelChar = ['a', 'o', 'e', 'i', 'y', 'u']
console.log(removeVowelKeys(['alarm', 'chip', 'isValid', 'Advice', 'onClick']));
// ['chip']
function removeVowelKeys(keys) {
  return keys.filter(item => !vowelChar.some(c => item.toLowerCase().startsWith(c)))
}
e0bqpujr

e0bqpujr4#

我想这个应该可以了。

converter(['alarm', 'chip', 'isValid', 'advice', 'onClick'])

 const converter = (string) => {
    let vowels = ['A', 'E', 'I', 'O', 'U', 'Y']
    let newString = string.filter(x => !vowels.includes(x[0].toUpperCase()))
    return newString
}

因此,首先我们将字符串的params数组传递给函数,然后我们创建元音数组来比较数组的每个第一个元素,我们检查是否是元音。
array.filter()将根据你的条件创建一个新的数组,所以这将只返回首字母不是元音的元素。

9nvpjoqh

9nvpjoqh5#

数组有一个.filter函数,它可能是解决这个问题的最佳工具。

//Arrow function that checks whether string starts with vowel letter
const startsWithVowel = str => /^[aeiouy]/i.test(str);

//Main function that will filter incoming array of strings
const removeVowelKeys = arr => arr.filter(str => !startsWithVowel(str));

//calling our function to filter the array.
let filteredList = removeVowelKeys(['alarm', 'chip', 'isValid', 'Advice', 'onClick']);

//printing the result to console
console.log(filteredList)
e5nqia27

e5nqia276#

过滤掉以元音开头的单词。简单地使用Array.prototype.filter方法。

const removeVowelKeys = (arr) => {
  const vowels = 'aeiou';
  // Now filter out the word whose first character is not in the vowels array.
  // Convert the first character to lower case for skipping the case sensitivity.
  return arr.filter(word => !vowels.includes(word.charAt(0).toLowerCase()));
}

const res = removeVowelKeys(['alarm', 'chip', 'isValid', 'Advice', 'onClick']);
console.log(res);
eivgtgni

eivgtgni7#

const removeVowelKeys = (arr) => {
  let count = 0
  const strConstant = ['a', 'e', 'i', 'o', 'u']
  for(let i=0;i< arr.length;i++) {
    if(!strConstant.includes((arr[i][0]).toLowerCase())) {
      arr[count] = arr[i]
      count++
    }
  }
  arr.length = count
  return arr
}
console.log(removeVowelKeys(['alarm', 'chip', 'isValid', 'Advice', 'onClick']))

相关问题