Javascript 在NodeJS中查找和替换的更干净的方法?

Javascript 在NodeJS中查找和替换的更干净的方法?,javascript,node.js,lodash,Javascript,Node.js,Lodash,我目前正在尝试读取一个文件,将内容和多个数组传递给函数;使用regex查看其中是否有匹配项,然后替换并最终更新 我编写的代码看起来既丑陋又笨拙,如下所示: find_and_replace: function(file, ...items) { let str = _.clone(file); let valid = {}; let do_escape = true; let hit; if (items != null ? items.length :

我目前正在尝试读取一个文件,将内容和多个数组传递给函数;使用regex查看其中是否有匹配项,然后替换并最终更新

我编写的代码看起来既丑陋又笨拙,如下所示:

find_and_replace: function(file, ...items) {
    let str = _.clone(file);
    let valid = {};
    let do_escape = true;
    let hit;
    if (items != null ? items.length : void 0) {
        for (let i = 0, len = items.length; i < len; i++) {
            let obj = items[i];
            try {
                for (k in obj) {
                    let v = obj[k];
                    if (valid[k] == null) {
                        valid[k] = v;
                    }
                }
            } catch (error) { }
        }
        try {
            str = str.replace('/{{([\s\S]+?)}}/g', function(a, b) {
                if (hit = valid[b]) {
                    if (do_escape) {
                        return escape(hit);
                    } else {
                        return hit;
                    }
                }
                return '';
            });
        } catch (error) {
            console.log(error);
        }
    }
    return str;
},
查找和替换:函数(文件,…项){
让str=\ u0.clone(文件);
设valid={};
让我们逃避=真;
让我们打;
if(items!=null?items.length:void 0){
for(设i=0,len=items.length;i
该功能的使用如下所示:

for (let _i = 0, _len = files.length; _i < _len; _i++) {
    let x = files[_i];
    if(x.includes('node_modules')) {
        continue;
    }
    builder.find_and_replace(builder.read_file(x), main_config, second_config);
    break;
}
for(let _i=0,_len=files.length;_i<_len;_i++){
设x=files[_i];
if(x.includes('node_modules')){
继续;
}
builder.find_和替换(builder.read_文件(x)、主配置、第二配置);
打破
}
此“系统”的功能是从文件中查找任何
{{tag}
占位符,并从
..items
组合数组中替换为正确的键


如果有人能为我指出降低所需代码量的正确方向,我将不胜感激。

一些简化可能包括使用
Object.entries
Array.reduce
方法

function find_and_replace(file, ...items) {
  let str = _.clone(file);
  let do_escape = true;
  let hit;

  if (items != null ? items.length : void 0) {
    const valid = items.reduce((valid, obj) => {
      Object.entries(obj)
        .map([k, v] => {
          valid[key] = v;
        });
      return valid;
    }, {});

    try {
      str = str.replace('/{{([\s\S]+?)}}/g', (a, b) => hit === valid[b] ? (do_escape ? escape(hit) : hit) : '');
    } catch (error) {
      console.log(error);
    }
  }
  return str;
},

一些简化可能包括使用
Object.entries
Array.reduce
方法

function find_and_replace(file, ...items) {
  let str = _.clone(file);
  let do_escape = true;
  let hit;

  if (items != null ? items.length : void 0) {
    const valid = items.reduce((valid, obj) => {
      Object.entries(obj)
        .map([k, v] => {
          valid[key] = v;
        });
      return valid;
    }, {});

    try {
      str = str.replace('/{{([\s\S]+?)}}/g', (a, b) => hit === valid[b] ? (do_escape ? escape(hit) : hit) : '');
    } catch (error) {
      console.log(error);
    }
  }
  return str;
},

使用函数rest参数(
…items
)时,总是会在
items
下获得一个数组,因此
如果(items!=null?items.length:void 0)
是冗余的

items.reduce((all,obj)=>({…all,…obj}),{})
…items

(string,[key,value])=>string.replace(新的RegExp(`{{${key}}}}}},“gi”),value)
将从对象中查找所有出现的键,并用值替换它们

const tr=(string,…items)=>“”+Object.entries(items.reduce((all,obj)=>({…all,…obj}),{})).reduce((string,[key,value])=>string.replace(new RegExp({{${key}}}},“gi”),value),string);

log(tr(“{{h}}{{{w}}!”,{h:“你好”},{w:“世界”}))当您使用函数rest参数(
…items
)时,总是会在
项下获得一个数组,因此
如果(items!=null?items.length:void 0)
是冗余的

items.reduce((all,obj)=>({…all,…obj}),{})
…items

(string,[key,value])=>string.replace(新的RegExp(`{{${key}}}}}},“gi”),value)
将从对象中查找所有出现的键,并用值替换它们

const tr=(string,…items)=>“”+Object.entries(items.reduce((all,obj)=>({…all,…obj}),{})).reduce((string,[key,value])=>string.replace(new RegExp({{${key}}}},“gi”),value),string);

log(tr(“{{h}}{{{w}}!”,{h:“你好”},{w:“世界”}))
您的问题中是否可以包含函数的用途和预期输出?@KrzysztofKrzeszewski我已经讨论并包含了此函数的预期用途。您的问题中是否可以包含函数的用途和预期输出?@KrzysztofKrzeszewski我已经讨论并包含了此函数的预期用途