如何创建"function that returns a function and splits csv file"?



我正在学习JS,我需要帮助完成以下任务:

我需要创建一个function compile_csv_search(text, key_name)来解析CSV格式。(不需要处理值中的引用和转义;假设字段值从不包含逗号或其他特殊字符。)

函数必须返回一个函数,该函数根据指定为compile_csv_search的第二个参数的字段。假设所有关键字字段中的值是唯一的。

示例用法:

var csv_by_name = compile_csv_search(
    "ip,name,descn"+
    "1.94.0.2,server1,Main Servern"+
    "1.53.8.1,server2,Backup Servern",
    "name");
console.log(csv_by_name("server2"));
console.log(csv_by_name("server9"));
...will print:
{ip: "10.52.5.1", name: "server2", desc: "Backup Server"}

未定义

**我不明白"返回函数的函数"是什么意思。函数如何返回另一个函数?

谢谢!


p.S。附上我的解决方案供您审查

function compile_csv_search(csvServerData){
  var header = csvServerData.split('n')[0].split(",");
  var spleatedServerData = csvServerData.split('n');
  return function(serverName)
  {
  for(var i = 1; i < spleatedServerData.length; i++){ 
      var singleServer = spleatedServerData[i].split(',')  
        var result = {};
        var exist = false;  
      for (var j = 0; j < header.length; j++) {
            if(singleServer.indexOf(serverName) == -1) 
                 break;
              exist = true;
            result[header[j]] = singleServer[j];   
        }
        if(exist){
         return(result);
         break; 
        }
    }
 }
}
var csv_by_name = compile_csv_search(
    "ip,name,descn"+
    "10.49.1.4,server1,Main Servern"+
    "10.52.5.1,server2,Backup Servern");

JavaScript中的函数是对象;它们可以被变量引用,作为参数传递,也可以像任何其他对象一样从函数返回。

这里有一个返回对象的函数:

function returnObject() {
  var result = { a: 1, b: 2, c: 3 };
  return result;
}

这里有一个函数,它返回另一个函数:

function returnFunction() {
  var result = function() { 
    console.log('another function!');
  }
  return result;
}

注意它们是多么的相似——第一个函数返回的对象是一个使用对象文字语法({})创建的普通对象,而第二个返回的对象恰好是一个函数。

您可以调用内部返回的函数,如下所示:

var out = returnFunction();
out();

甚至returnFunction()();

但是,不能只调用result()——result只在returnFunction内部定义。从外部访问它的唯一方法是通过调用外部函数来检索它。

这样的东西就可以了:

function compile_csv_search(text, key_name) {
    var lines = text.split('n');
    var keys = lines[0].split(',');
    var key_index = keys.indexOf(key_name);
    return function(value) {
        for(var i = 1; i<lines.length; i++) {
            current_line_values = lines[i].split(',');
            if(current_line_values[key_index] === value) {
                var result = {};
                for(var j = 0; j<keys.length; j++) {
                    result[keys[j]] = current_line_values[j];
                }
                return result;
            }
        }
    }
}

另请参阅此小提琴:http://jsfiddle.net/efha0drq/

您总是可以像对待任何其他js对象一样对待一个函数。分配给变量,传递给函数,存储在数组中。。。一切都很好。

这个例子的神奇之处在于,您可以在返回的函数中读取/写入compile_csv_search()函数中定义的变量。因此,可以在定义函数的局部变量中存储一些内容,然后从返回的变量中检索,即使定义函数早就完成了执行。你可能听说过"关闭",对吧?

最新更新