Javascript 是否有一种简单的方法(最好是使用ES6+;)可以基于配置对象对数组值应用突变?
我正在尝试编写一个函数,允许我配置数组值。我想创建配置对象,如下所示:Javascript 是否有一种简单的方法(最好是使用ES6+;)可以基于配置对象对数组值应用突变?,javascript,Javascript,我正在尝试编写一个函数,允许我配置数组值。我想创建配置对象,如下所示: var words = [ 'spacejump', 'apples', 'graphics', 'javascript', 'peaches' ]; var configs = [{ upper_case:'first', length:[6,8] },{ upper_case:'last', length:[7,9], strip:'vow
var words = [
'spacejump',
'apples',
'graphics',
'javascript',
'peaches'
];
var configs = [{
upper_case:'first',
length:[6,8]
},{
upper_case:'last',
length:[7,9],
strip:'vowels'
},{
length:10,
strip:'consonants'
}]
[
[
"Apples",
"Graphics",
"Peaches"
],
[
"spcjmP",
"grphcS",
"pchS"
],
[
"aai"
]
]
然后将这些配置应用于另一个字符串数组(本例中为单词),并输出结果,如下所示:
var words = [
'spacejump',
'apples',
'graphics',
'javascript',
'peaches'
];
var configs = [{
upper_case:'first',
length:[6,8]
},{
upper_case:'last',
length:[7,9],
strip:'vowels'
},{
length:10,
strip:'consonants'
}]
[
[
"Apples",
"Graphics",
"Peaches"
],
[
"spcjmP",
"grphcS",
"pchS"
],
[
"aai"
]
]
我正在努力开始,因为我正在尝试过滤结果,但要将结果过滤到新的单个数组中
function configurate(config) {
for (var filter in config) {
switch (filter) {
case upper_case:
//capitalize either first or last letter
case length:
//include words with said length
case strip:
//strip vowels or consonants
}
}
}
function applyConfig(array, configs) {
//forEach() word in array apply config
//this is where I am confused a bit,
//
//
}
这就是我到目前为止所做的,我遗漏了太多的实现,因为我担心我没有有效地完成这项工作 您可以使用lambda函数来创建配置操作,并将其包含在配置对象中 现在,您可以在configs数组上循环,对于与配置的长度要求匹配的每个字,将所有函数应用于它 下面是一个示例实现。也许在很多方面都可以做得更好,但我认为这是你想要的
var单词=[
“太空跳跃”,
“苹果”,
“图形”,
“javascript”,
“桃子”
];
常量配置函数={
大写字母:{
第一个:s=>s[0].toUpperCase()+s.slice(1),
last:s=>s.slice(0,s.length-1)+s[s.length-1].toUpperCase()
},
带:{
元音:s=>s.replace(/[aeiou]/ig',),
辅音:s=>s.replace(/[bcdfghjklmnpnpqrstvxz]/ig',)
},
范围:(s,…范围)=>范围[1]?(s.length>=范围[0]&&s.length=范围[0]
};
变量配置=[{
修改器:[
config_functions.upper_case.first
],
长度:s=>config_functions.range(s,6,8)
},{
修改器:[
config_functions.upper_case.last,
config_functions.strip.vowells
],
长度:s=>config_functions.range(s,7,9)
},{
修改器:[
config_functions.strip.consonates
],
长度:s=>config_functions.range(s,10)
}];
让res=configs.map(config=>words
.filter(word=>config.length(word))
.map(word=>config.modifiers.reduce((acc,func)=>acc=func(acc,word));
console.log(res)
您能详细介绍一下您提供的示例数组吗?每个子数组是什么意思?苹果是如何变成spcjmP的?为什么最后一个数组只包含一个项目?我很抱歉!我将编辑!为了澄清,数组可以是任何单词列表。此时唯一的配置是选择长度,first/last字母大写并分条元音或辅音。使用map
,而不是forEach
。鉴于您的自定义配置格式,您的configurate
功能似乎很好。我想说,先让它工作,然后再考虑效率。是的,我现在就开始用map实现它,看看效果如何。非常感谢everyo氖。