如何迭代javascript行分隔字符串,检查分号分隔的第一个值,并在值相等的位置连接行?
我有一个CSV,我正在使用它作为数据源。我需要将换行符(“\n”)上的行拆分为一个名为“lines”的变量,并需要将每行中分号(“;”)分隔的值拆分为一个名为“items”的变量 我希望能够检查一行中的第一个值,如果它等于输入框中的输入值,我希望将这一行(值之间带有分号分隔符)添加到名为newData的新变量中。如果它不等于输入框中的值,我想排除它 我基本上想过滤掉第一个值不等于我要搜索的值的每一行 以下是数据示例(假设每行后面都有一个换行符('\n'): 我可以拆分第一行标题,但这不会包含在我正在寻找的结果中。如果我的搜索在ID列上,搜索值为1,我只想返回ID等于1的行,并希望它与上面的格式匹配(sans标题行)。相反,如果搜索值为7,则只返回无行或仅返回标题行 到目前为止,我所能做的就是从导入的数据中分割出行(我发现的所有这些代码,我对javascript或jQuery都不太熟悉):如何迭代javascript行分隔字符串,检查分号分隔的第一个值,并在值相等的位置连接行?,javascript,jquery,arrays,csv,delimiter,Javascript,Jquery,Arrays,Csv,Delimiter,我有一个CSV,我正在使用它作为数据源。我需要将换行符(“\n”)上的行拆分为一个名为“lines”的变量,并需要将每行中分号(“;”)分隔的值拆分为一个名为“items”的变量 我希望能够检查一行中的第一个值,如果它等于输入框中的输入值,我希望将这一行(值之间带有分号分隔符)添加到名为newData的新变量中。如果它不等于输入框中的值,我想排除它 我基本上想过滤掉第一个值不等于我要搜索的值的每一行 以下是数据示例(假设每行后面都有一个换行符('\n'): 我可以拆分第一行标题,但这不会包含在我
$.get(“myFile.csv”,函数(数据){
数据=数据。替换(/“/g,”);
变量行=data.split('\n');
var first=lines.shift().split(“;”);
});
//HTML输入框
搜寻
谢谢。这里有一些这样做的代码,假设您知道如何使数据与lines变量中的数据相同(您说您做到了)。您可以按任何字段和任何值进行搜索
$(文档).ready(函数(){
变量标题=““ID”;“日期”;“时间”;“状态”;
变量行=[
“1”;“2013.01.01”;“上午10:03”;“活动”,
“1”;“2013.01.05”;“上午7:45”;“活动”,
“2”;“2013.01.03”;“晚上9:12”;“活动”,
“2”;“2013.01.11”;“上午6:37”;“非活动”,
“1”;“2013.01.22”;“下午12:57”;“非活动”
];
//其中包含要搜索的字段的名称
//由标题和要搜索的值定义。
var searchField='ID';
var searchForThisValue=1;//这将是代码中的一个参数
var endResult=[];//这是存储的结果
var-fieldIndex=-1;
$.each(headers.split(“;”),函数(index){
if(this.replace(/[“]/g,”)==searchField){
字段索引=索引;
}
});
$.each(行,函数(){
var fields=this.split(“;”);//用分号拆分
//去掉数字周围的引号
如果(字段[fieldIndex].replace(/[“]/g,”)==searchForThisValue){
endResult.push(这个);
}
});
//对你的结果做任何你想做的,这里我刚刚抛出
//将它们放入id为“blah”的元素中
$.each(endResult,function(){
$('#blah')。追加(this+'
');
});
});
下面是一个使用纯JavaScript的简单解决方案:
// Assuming csvString is the string given in the question
var inputArray = csvString.split('\n');
var filteredArray = inputArray.filter(function (rowString) {
return (rowString.split(";")[0] === '"1"');
});
var filteredString = filteredArray.join('\n');
在此结束时,filteredString
将:
"1";"2013.01.01";"10:03 AM";"Active"
"1";"2013.01.05";"07:45 AM";"Active"
"1";"2013.01.22";"12:57 PM";"Inactive"
有关此解决方案中使用的方法如何工作的更多信息,请参阅:
- 这似乎有点言过其实,但我认为解决这类问题最好的办法是首先将深奥的数据格式(CSV)转换成Javascript可以全面理解的格式(JSON类型的数据-数组和对象)。我无法使用AJAX(但您已经对这部分进行了排序),因此我创建了一个示例,从HTML中的一个元素提取CSV数据
工作演示
背景代码
函数findEntriesWithID(ID){
var分录=[];
对于(变量i=0;i
解释
csvToArray
将CSV作为字符串,并输出一个对象数组,其中第一行(标题)为用于确定每个后续行的属性。这是代码的核心部分,可以应用于各种情况,以便于以可管理的形式获取数据。可能需要详细说明,但对于您的用例来说相当可靠。代码的其余部分则更容易理解:findEntriesWithID
获取给定的ID并返回具有该ID属性的所有对象(以前是行),然后将它们作为新数组返回$(document).ready(function() {
var headers = '"ID";"Date";"Time";"Status"';
var lines = [
'"1";"2013.01.01";"10:03 AM";"Active"',
'"1";"2013.01.05";"07:45 AM";"Active"',
'"2";"2013.01.03";"9:12 PM";"Active"',
'"2";"2013.01.11";"6:37 AM";"Inactive"',
'"1";"2013.01.22";"12:57 PM";"Inactive"'
];
// these contain the name of the field you want to search in
// as defined by your header and the value to search for.
var searchField = 'ID';
var searchForThisValue = 1; // this would be a parameter in your code
var endResult =[]; // this is the stored result
var fieldIndex = -1;
$.each(headers.split(';'), function(index) {
if( this.replace(/["']/g, "") == searchField ) {
fieldIndex = index;
}
});
$.each(lines, function() {
var fields = this.split(';'); // split up by semicolon
// strip the quotes around around the numbers
if(fields[fieldIndex].replace(/["']/g, "") == searchForThisValue) {
endResult.push(this);
}
});
// do whatever you want with your result, here I have just thrown
// them into an element with the id of 'blah'
$.each(endResult, function() {
$('#blah').append(this + '<br/>');
});
});
// Assuming csvString is the string given in the question
var inputArray = csvString.split('\n');
var filteredArray = inputArray.filter(function (rowString) {
return (rowString.split(";")[0] === '"1"');
});
var filteredString = filteredArray.join('\n');
"1";"2013.01.01";"10:03 AM";"Active"
"1";"2013.01.05";"07:45 AM";"Active"
"1";"2013.01.22";"12:57 PM";"Inactive"
function findEntriesWithID(ID){
var entries = [];
for(var i = 0; i < csvArray.length; ++i){
var row = csvArray[i];
if(row.ID === ID){
entries.push(row);
}
}
return entries;
}
function csvToArray(csvString){
// The array we're going to build
var csvArray = [];
// Break it into rows to start
var csvRows = csvString.split(/\n/);
// Take off the first line to get the headers, then split that into an array
var csvHeaders = csvRows.shift().split(';');
// Loop through remaining rows
for(var rowIndex = 0; rowIndex < csvRows.length; ++rowIndex){
var rowArray = csvRows[rowIndex].split(';');
// Create a new row object to store our data.
var rowObject = csvArray[rowIndex] = {};
// Then iterate through the remaining properties and use the headers as keys
for(var propIndex = 0; propIndex < rowArray.length; ++propIndex){
// Grab the value from the row array we're looping through...
var propValue = rowArray[propIndex].replace(/^"|"$/g,'');
// ...also grab the relevant header (the RegExp in both of these removes quotes)
var propLabel = csvHeaders[propIndex].replace(/^"|"$/g,'');;
rowObject[propLabel] = propValue;
}
}
return csvArray;
}