我有一个相当大的javascript / html应用程序,它经常更新并接收大量数据。它运行得非常快速和顺利,但我现在需要引入一个函数,它必须处理特殊字符的任何传入数据,我担心这会有很多额外的处理时间(而jsperf目前有点死)。
我将通过AJAX请求获取.json文件,然后直接使用数据。但现在我需要注意#2C(十六进制逗号)的字符串,因为所有传入的数据都是以逗号分隔的值。
File.json中的
{
names: "Bob, Billy",
likes : "meat,potatoes
}
现在我需要
{
names: "Bob, Billy",
likes : "meat#2Cbeear#2Cwine,potatoes
}
其中#2C(逗号的十六进制)是字符串中的逗号。
我有这个代码可以正常工作
var str = "a,b,c#2Cd";
var arr = str.split(',');
function escapeCommas(arr) {
for (var i = 0; i < arr.length; i++) {
if (arr[i].indexOf("#2C") !== -1) {
var s = arr[i].replace("#2C", ',');
arr[i] = s;
}
}
return arr;
}
console.log(escapeCommas(arr));
http://jsfiddle.net/5hogf5me/1/
我有很多函数可以将JSON数据处理为
var name = str.split(',')[i];
我想知道如何扩展或重写.split以自动用逗号替换#2C。
感谢您的任何建议。
答案 0 :(得分:1)
编辑:我认为这更好:
var j = {
names: "Bob, Billy",
likes : "meat#2Cpotatoes"
};
var result = j.likes.replace(/#2C/g, ',');
// j.likes.replace(/#2C/ig, ','); - if you want case insensitive
// and simply reverse parameters if you want
console.log(result);
这是我最初的做法:
var j = {
names: "Bob, Billy",
likes : "meat,potatoes"
}
var result = j.likes.split(",").join("#2C")
console.log(result);
// meat#2Cpotatoes
或者如果你反过来的话:
var j = {
names: "Bob, Billy",
likes : "meat#2Cpotatoes"
}
var result = j.likes.split("#2C").join(",")
console.log(result);
// meat,potatoes
答案 1 :(得分:0)
[已更新以反映反馈] - 尝试http://jsfiddle.net
var str = 'a,b,c#2Cd,e#2Cf#2Cg';
alert(str.split(',').join('|')); // Original
String.prototype.native_split = String.prototype.split;
String.prototype.split = function (separator, limit) {
if ((separator===',')&&(!limit)) return this.replace(/,/g,'\0').replace(/#2C/gi,',').native_split('\0');
return this.native_split(separator, limit);
}
alert(str.split(',').join('|')); // Enhanced to un-escape "#2C" and "#2c"
String.prototype.split = String.prototype.native_split;
alert(str.split(',').join('|')); // Original restored
关于你的功能和#34; escapeCommas&#34;的几个小的切线说明:这个功能真的是一个合乎逻辑的&#34; un-escape&#34;因此可能会重新考虑函数名称。此外,除非您打算只替换第一次出现的&#34;#2C&#34;在每个项目中,你应该使用&#34; g&#34; (全局)标志,否则为项目&#34; c#2Cd#2Cde&#34;会出来&#34; c,d#2Ce&#34;。