我拥有的是什么:县,州和县的列表file.txt中的代码,带有“,”作为分隔符:
001001,Autauga, AL
001003,Baldwin, AL
001005,Barbour, AL
001007,Bibb, AL
001009,Blount, AL
001011,Bullock, AL
001013,Butler, AL
我想做什么:
在我拥有县和州的情况下搜索特定代码。
思想: 使用ajax加载整个文件并解析它:
$.ajax({
url : CountyAndStateURL,
type : 'GET',
dataType : 'txt',
crossDomain : true,
success: function(data) {
pageExecute.fileContents = data;
多数民众赞成在哪里迷路...我如何搜索这个文本文件并找到我知道县和州的代码?
答案 0 :(得分:3)
使用循环。
var result = [];
var rows = text.split('\n');
for (var r = 0; r < rows.length; r++) {
var items = rows[r].split(',');
var item = {};
item.code = items[0];
item.name = items[1];
result.push(item);
}
console.log(result);
<强> jsFiddle 强>
要让代码像这样测试:
if (item.state == state && item.county == county)
return item.code;
答案 1 :(得分:2)
如果您的列表很长并且您将进行多次查找,则可以使用字典来提高时间效率:在字典中,每个查找都具有时间复杂度O(log(n)),这是一个比O(n)解决方案好一点。
我建议的解决方案:
var text =
"001001,Autauga, AL\n" +
"001003,Baldwin, AL\n" +
"001005,Barbour, AL\n" +
"001007,Bibb, AL\n" +
"001009,Blount, AL\n" +
"001011,Bullock, AL\n" +
"001013,Butler, AL\n";
// Split the text in lines
// (Trim it first to get rid of any newline character at the end)
var lines = text.trim().split("\n");
// Regular expression for line's content
var regex = /\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*/;
var dict = { };
lines.forEach(function(lineStr) {
var matchResult = lineStr.match(regex);
var key = {
county: matchResult[2],
state : matchResult[3]
};
var code = matchResult[1];
dict[key] = code;
});
// Lookup in dict:
console.log(dict[{ county: "Bibb", state: "AL" }]);
编辑:我的正则表达式如何工作?
var regex = /\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*/;
\s
- 任何空格字符
\s*
- 0个或更多空格字符
.
- 除新行之外的任何字符
.+
- 一个或多个字符(新行除外)
( )
- 捕获组:与括号内的规则匹配的内容将写入由String.match()函数生成的数组。
,
- 只是一个逗号字符
答案 2 :(得分:1)
您可以使用此功能将CSV(逗号分隔值)转换为JSON HERE
//var csv is the CSV file with headers
function csvJSON(csv){
var lines=csv.split("\n");
var result = [];
var headers=lines[0].split(",");
for(var i=1;i<lines.length;i++){
var obj = {};
var currentline=lines[i].split(",");
for(var j=0;j<headers.length;j++){
obj[headers[j]] = currentline[j];
}
result.push(obj);
}
//return result; //JavaScript object
return JSON.stringify(result); //JSON
}
那么,找到类似的东西:
// the code you're looking for
var needleCode = 001005;
var needleCounty = 'Barbour';
// iterate over each element in the array
for (var i = 0; i < obj.length i++){
// look for the entry with a matching `code` value
if (obj[i][0] === needleCode && obj[i][1] === needleCounty){
// we found it
// obj[i][1] is the matched county
// obj[i][2] is the matched county code
}
}