我正在学习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()
函数中定义的变量。因此,可以在定义函数的局部变量中存储一些内容,然后从返回的变量中检索,即使定义函数早就完成了执行。你可能听说过"关闭",对吧?