【发布时间】:2021-03-19 05:14:13
【问题描述】:
我需要编写一个 removeVowelKeys 函数,该函数接受一个对象并删除所有以元音开头的键。寄存器无关紧要。
例如,我有一个对象
const vowelsObj = {
alarm: 'hello',
chip: 100,
isValid: false,
Advice: 'Learn it hard',
onClick: 'make it great again',
}
函数的工作结果应该是这样的:
vowelsObj === {
chip: 100,
}
这是我已经写的
function removeVowelKeys(object) {
const num = Object.keys(object);
for( let i = 0; i < num.length; i++) {
for (let key in object) {
if (key.startsWith('a'||'e'||'i'||'o'||'u'||'y')) {
delete object[key];
}
}
}
return object;
}
但它只删除以元音开头的第一个字段,其他字段保留。有什么想法可以做到吗?
【问题讨论】:
-
key.startsWith('a'||'e'||'i'||'o'||'u'||'y'))这并不像你认为的那样,..'a'||'e'||'i'||'o'||'u'||'y' = 'a',IOW:你的代码可以 ->key.startsWith('a') -
在你的 if 语句中试试这个
['a','e','i','o','u','y'].includes(key.charAt(0).toLowerCase())。 -
编程语言不像人类那样理解
key.startsWith('a' || 'b' || 'c'),你应该把它翻译成key.startsWith('a') || key.startsWith('b') || key.startsWith('c');或者只是['a', 'b', 'c'].includes(key[0].toLowerCase());或者,如果您更喜欢更紧凑的方式const removeVowelKeys = object => Object.fromEntries(Object.entries(object).filter(pair => !['a','e','i','o','u','y'].includes(pair[0][0].toLowerCase()))),这行函数会将对象作为键值对进行破坏,然后过滤掉元音键,并返回一个新构造的对象
标签: javascript node.js loops object conditional-statements