Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有一种简单的方法(最好是使用ES6+;)可以基于配置对象对数组值应用突变?_Javascript - Fatal编程技术网

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氖。