2014-10-09 75 views
-1

我需要編寫一個函數some_name(text,key_name)來解析CSV格式的文本 (不需要處理值中的引用和轉義; 假定字段值從不包含逗號或其他特殊字符)。函數必須返回一個函數,該函數根據指定爲compile_csv_search的第二個參數的字段 的值查找記錄。假設關鍵字段中的所有值 都是唯一的。text to csv search function javascript

示例用法:

var func_search = some_name(
    "ip,name,desc\n"+ 
    "10.49.1.4,server1,Main Server\n"+ 
    "10.52.5.1,server2,Backup Server\n", 
    "name"); 

console.log(func_search("server2")); 
console.log(func_search("server9")); 

...將打印:

{ip: "10.52.5.1", name: "server2", desc: "Backup Server"} 

我在線(\ n)的,然後分裂第一行(,)劃分文本和由鍵陣列我返回的結果對象。但我不明白接下來要做什麼。我必須使用閉包,但我不知道如何。我會很高興每一個幫助或提示,將導致解決這項任務。 這是我擁有的:

function compile_csv_search (text, key_name) { 
    var result={}; 
    var lines=text.split("\n"); 
    var key_names=lines[0].split(","); 
    lines.shift(); 
    return function search (name) { //"server2" in example 
    for(var i=0; i<lines.length; i++){ 
     /* 
      some code 
     */ 
     } 
    } 

} 

對不起,我的英文。

回答

0

例如.. http://jsfiddle.net/fvosqjvn/

var objs = { 
    'data': [], 
    'parseArray': function (ar) 
    { 
     var properties = ar[0].split(','); 
     for (var i = 1; i < ar.length; i++) 
     { 
     var obj = {}, vals = ar[i].split(','); 
     for(var j = 0; j < vals.length; j++) 
      obj[properties[j]] = vals[j]; 
     this.data.push(obj); 
     } 
    }, 
    'searchByProperty': function (property, search) 
    { 
     return this.data.filter(function(el) { 
      return el.hasOwnProperty(property) && el[property] == search; 
     }); 
    } 
} 

var strs = "\ 
ip,name,desc\n\ 
10.49.1.4,server1,Main Server\n\ 
10.52.5.1,server2,Backup Server".split("\n"); 

objs.parseArray(strs); 
console.log(objs.searchByProperty('name', 'server2')) 
+0

謝謝,它的工作,但鏈接沒有任何反應。 – 2014-10-09 09:23:54

+0

@ user3342929,因爲它通過'console.log' – Cheery 2014-10-09 16:23:32