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