如何创建一个"函数返回一个函数并拆分csv文件"?

时间:2014-08-28 22:22:56

标签: javascript function

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

我需要创建一个解析文本的function compile_csv_search(text, key_name) CSV格式。 (不要求处理报价和逃避价值; 假设字段值从不包含逗号或其他特殊字符。)

  

函数必须返回一个函数,该函数按值的值查找记录   指定为compile_csv_search的第二个参数的字段。假设全部   关键字段中的值是唯一的。

样本用法:

var csv_by_name = compile_csv_search(
    "ip,name,desc\n"+
    "1.94.0.2,server1,Main Server\n"+
    "1.53.8.1,server2,Backup Server\n",
    "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,desc\n"+
    "10.49.1.4,server1,Main Server\n"+
    "10.52.5.1,server2,Backup Server\n");

2 个答案:

答案 0 :(得分:2)

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

这是一个返回对象的函数:

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

这是一个返回另一个函数的函数:

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

  return result;
}

注意它们是如何真正相似的 - 第一个函数返回的对象是使用对象文字语法({})创建的普通对象,而第二个函数返回的对象恰好是一个函数。 / p>

您可以像这样调用内部返回函数:

var out = returnFunction();
out();

甚至是returnFunction()();

但是,您无法拨打result() - result仅在returnFunction内定义。从外部访问它的唯一方法是通过调用外部函数来检索它。

答案 1 :(得分:0)

这样的事情会很好:

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()函数中定义的变量。因此,可以将某些内容存储在定义函数的局部变量中,然后从返回的函数中检索,即使定义函数很久以前已完成执行也是如此。您可能听说过“关闭”,对吧?