如何基于conditions规则正确修改JavaScript数组pred?
基于规则修改数组的正确实现
原始数据与需求
原始数组:
var pred = ['z','b','d','e','z','f','b','d']
规则数组:
var conditions = [ {new:"a", old:"z", func:"replace"}, // 将z替换为a {new:"c", old:"b", func:'add_and_replace'} // 在b后添加c ]
期望输出结果:
['a','b','c','d','e','a','f','b','c','d']
原代码的问题
原实现存在两个核心错误:
- 遍历每个元素时,执行完规则处理后又额外push了原元素,导致重复添加内容
- 未处理规则匹配后跳过原元素默认添加的逻辑,流程混乱
正确实现代码
var conditions = [ {new:"a", old:"z", func:"replace"}, {new:"c", old:"b", func:'add_and_replace'} ] var pred = ['z','b','d','e','z','f','b','d'] let new_pred = [] pred.forEach(item => { // 查找当前元素对应的规则 const matchedRule = conditions.find(rule => rule.old === item) if (matchedRule) { switch(matchedRule.func) { case 'replace': new_pred.push(matchedRule.new) break case 'add_and_replace': new_pred.push(item) new_pred.push(matchedRule.new) break } } else { // 无匹配规则则直接保留原元素 new_pred.push(item) } }) pred = new_pred console.log(pred)
代码逻辑说明
- 遍历原数组的每个元素,先通过
find方法查找是否有匹配的规则 - 匹配到规则时,根据规则的
func字段执行对应操作:replace:直接添加规则指定的新值,完成替换add_and_replace:先添加原元素,再添加规则指定的新值,实现追加效果
- 未匹配到任何规则时,直接将原元素加入新数组
内容的提问来源于stack exchange,提问作者atulsemwal
相关产品推荐
相关产品推荐

