Javascript 将CSV字符串转换为不带.split()的数组
我正在尝试提出一个函数,该函数不使用Javascript 将CSV字符串转换为不带.split()的数组,javascript,parseint,Javascript,Parseint,我正在尝试提出一个函数,该函数不使用.split()就可以接受任何字符串并输出数字和字符串数组。下面是它需要通过的测试和当前通过测试的函数。我很好奇其他人会如何解决这个问题 function csvParse(inputString) { var outputArray = []; var inputArray = inputString.split(','); for (var i =0; i < inputArray.length; i++) { if (!
.split()
就可以接受任何字符串并输出数字和字符串数组。下面是它需要通过的测试和当前通过测试的函数。我很好奇其他人会如何解决这个问题
function csvParse(inputString) {
var outputArray = [];
var inputArray = inputString.split(',');
for (var i =0; i < inputArray.length; i++) {
if (!Number.isNaN(+inputArray[i])) {
outputArray.push(+inputArray[i]);
} else {
outputArray.push(inputArray[i].replace(/['"]+/g,'').trim());
}
}
return outputArray;
};
describe('CSV Parse', function() {
it('should parse a string of integers correctly', function() {
var input = '3,7,9,1,25';
var output = [ 3, 7, 9, 1, 25 ];
expect(csvParse(input)).to.deep.equal(output);
});
it('should parse a string of strings correctly', function() {
var input = '"3","7","9","1","25"';
var output = ["3", "7", "9", "1", "25"];
expect(csvParse(input)).to.deep.equal(output);
});
it('should parse a string of integers and strings correctly', function() {
var input = '1, "one", 2, "two", 3, "three"';
var output = [1, "one", 2, "two", 3, "three"];
expect(csvParse(input)).to.deep.equal(output);
});
});
函数csvParse(inputString){
变量输出阵列=[];
var inputArray=inputString.split(',');
for(变量i=0;i
如果您真的想解析CSV格式而不使用spilt
,下面是一种使用新功能的方法
基本的方法是用模拟的${b}
表达式替换CSV,
,并将字符串转换为模板字符串。然后在使用标记
功能时对其求值。这将为我们创建数组
这是小提琴
function csvParse(inputString) {
b = null; //dummy variable
//Prepare the notation to be a TemplateString. Use var b in a dummy expression
inputString = "`" + inputString.replace(/,/g, '${b}') + "`";
//Evaluate. Note that we use a tag function inside the evaluation to create the array
//We also pass the string as a Template String to evaluate. This is optional
fn = new Function(`function tag(inputArray) {
return inputArray;
}
return tag ${inputString} `);
//Return the array
return fn().raw;
};
console.log(csvParse("power,of,es6"));
split
是一个不错的选择。但这就是你想要的答案。基本的JS解决方案只是按照你的要求替换split方法(fiddle)
函数dumbComaSplit(inputString){
var strArray=[];
var tmpStr=“”;
对于(变量i=0;i
我会用拆分来解决这个问题。如果存在语言功能,为什么不使用它,而不是滚动您自己的、很可能已损坏的实现?不要重新发明轮子…:)听起来像是一项任务。如果您自己不这样做,您将如何解释您在代码中做出这些决定的原因。
function dumbComaSplit(inputString) {
var strArray = [];
var tmpStr = "";
for (var i = 0; i < inputString.length; i++) {
if (inputString.charAt(i) == ',') {
strArray.push(tmpStr);
tmpStr = "";
continue;
}
tmpStr += inputString.charAt(i);
}
strArray.push(tmpStr);
return strArray;
};
function csvParse(inputString) {
var outputArray = [];
var inputArray = dumbComaSplit(inputString);
for (var i =0; i < inputArray.length; i++) {
if (!Number.isNaN(+inputArray[i])) {
outputArray.push(+inputArray[i]);
} else {
outputArray.push(inputArray[i].replace(/['"]+/g,'').trim());
}
}
return outputArray;
};