使我的功能更可重用的提示

时间:2019-12-17 09:22:04

标签: javascript

任何指导或教育将不胜感激。

我有一系列产品名称-带有许多冗余和随机短语。

我认为我会很聪明,并创建一些小的辅助函数来提取不必要的短语,与此同时,我正在尝试“新”(对我而言)数组功能。

但是,我陷入了困境,而且我不知道如何以最有效的方式最好地进行下去。

let sku = base_arr.map(function(word) {
    let result = (check_regex(word, regex_sku)) ? extract_regex(word, regex_sku) : word;
    return result;
});
let age = sku.map(function(word) {
    let result = (check_regex(word, regex_age)) ? extract_regex(word, regex_age) : word;
    return result;
});

如果我添加更多的辅助功能,例如删除空格,并且不要按顺序进行操作。

我的数组开始取消一些先前的工作。

我尝试将代码包装在函数中,而不是压缩为小的函数表达式。但是,这似乎不起作用。

例如:

function extract_sku(arr) {
return arr.map(function(word) {
    let result = (check_regex(word, regex_sku)) ? extract_regex(word, regex_sku) : word;
    return result;
});
};

但是,当我想应用第二个辅助函数时,得到的是未定义的。

console.log(extract_sku(extract_whitespace(base_arr)))

取决于我要处理的数组,我不知道要应用什么辅助函数。

我把这一切都弄错了吗?我是否应该编写一个函数来封装所有可能的this.extract_sku = function(),将基本数组复制到临时数组,然后使用splice?

任何指导都是最有帮助的!

3 个答案:

答案 0 :(得分:2)

您只需传递一个正则表达式数组即可按顺序替换并获取所需结果

function extract(base_arr,regex_arr){
  let result;
  for(regex in regex_arr){
    base_arr.map(function(word) {
      result = (check_regex(word, regex)) ? extract_regex(word, regex) : word;
    }
  }
  return result;  
}

然后在您应该致电的示例案例中获取所需的结果

let age = extract(base_arr, [regex_sku, regex_age]);

还可以将正则表达式数组设置为全局变量

let ageRegex = [regex_sku, regex_age];

还有一个函数getAge();

  function getAge(base_arr) {
    return extract(base_arr,ageRegex);
  }

答案 1 :(得分:1)

您可以创建单独的function,将不同的部分设置为parameter,并将其用作map内部的回调,例如:

function mapper (word, reg) {
    let result = (check_regex(word, reg)) ? extract_regex(word, reg) : word;
    return result;
}

let age = sku.map(word => mapper(word, regex_sku));

答案 2 :(得分:0)

只需创建一个函数,它将为您创建一个映射器:

function createRegexMapper(regex) {
    return word => check_regex(word, regex)
        ? extract_regex(word, regex)
        : word;
}

然后您可以在很多映射中使用它

arr.map(createRegexMapper(regex1))
   .map(createRegexMapper(regex2))
   .map(createRegexMapper(regex3))