如何将字符串转换为 JScript 对象数组
How to convert a string into an Array of JScript Objects
在 Javascript 中,我有一个字符串需要转换为对象数组。
//ORIGINAL STRING :
var originalString = "[13, "2017-05-22 17:02:56", "Text111"], [25, "2017-05-22 17:03:03", "Text222"], [89, "2017-05-22 17:03:14","Text333"]";
我需要能够遍历每个对象,并使用索引获取 3 个属性。
那将给出(对于第一个数组):
myItem[0] => 13
myItem[1] => "2017-05-22 17:02:56"
myItem[2] => "Text111"
起初我觉得这很简单(可能确实如此),但经过几次尝试后,我仍然卡住了。
请注意 我不能使用 jQuery 因为 运行 一个非常古老的 Javascript 规范:"Microsoft JScript",符合 EcmaScript 3。
谢谢你;)
应该这样做
var regex = /\[([^\]]+)/g;
var originalString = '[13, "2017-05-22 17:02:56", "Text111"], [25, "2017-05-22 17:03:03", "Text222"], [89, "2017-05-22 17:03:14","Text333"]';
var result = regex.exec(originalString);
var container = [];
for (var j = 0; result ? true : false; j++) {
var tokens= result[1].split(',');
var tempContainer = []
for (var i = 0; i < tokens.length; i++) {
tempContainer[i] = tokens[i].replace(/["\s]/g, '');
}
container[j] = tempContainer;
// continue the search
result = regex.exec(originalString);
}
console.log(container);
如果你可以使用JSON.parse
,那么你就可以将[
和]
分别附加到字符串的开头和结尾,然后将其解析为数组的数组。
var originalString = '[13, "2017-05-22 17:02:56", "Text111"], [25, "2017-05-22 17:03:03", "Text222"], [89, "2017-05-22 17:03:14","Text333"]';
var result = JSON.parse("[" + originalString + "]");
console.log(result);
然而,据我所知,JSON.parse
不是 ECMAScript 3 的投诉,所以你必须自己解析它。
这样的事情应该有所帮助:
var originalString = '[13, "2017-05-22 17:02:56", "Text111"], [25, "2017-05-22 17:03:03", "Text222"], [89, "2017-05-22 17:03:14","Text333"]';
function trimString(str, trims) {
var left = 0;
var right = str.length - 1;
while (left < right && trims.indexOf(str[left]) != -1) {
left++;
}
while (left < right && trims.indexOf(str[right]) != -1) {
right--;
}
return str.substr(left, right - left + 1);
}
function splitByCommasOutOfBrackets(str) {
var result = [];
var current = "";
var bracketBalance = 0;
for (var i = 0; i < str.length; i++)
{
switch (str[i]) {
case '[':
current = current + str[i];
bracketBalance++;
break;
case ']':
current = current + str[i];
bracketBalance--;
break;
case ',':
if (bracketBalance === 0) {
result.push(trimString(current, [" ", "[", "]", "\""]));
current = "";
} else {
current = current + str[i];
}
break;
default:
current = current + str[i];
break;
}
}
if (current.length > 0) {
result.push(trimString(current, [" ", "[", "]", "\""]));
}
return result;
}
var arr = splitByCommasOutOfBrackets(originalString);
console.log("1: Split by commas which separate arrays");
console.log(arr);
for (var i = 0; i < arr.length; i++) {
arr[i] = splitByCommasOutOfBrackets(arr[i]);
}
console.log("2: Split every array by the same rules");
console.log(arr);
我不太确定 ECMAScript 3 中存在哪些功能,为此我使用了 MDN。看起来很多函数甚至 String.prototype.trim
在 ECMAScript 3 中都不存在。所以我不得不自己重新实现它。如果我错了并且您可以在 JScript 中使用它们,那么只需使用其中的一些函数即可。
算法的大致思路如下:
- 用逗号 分隔字符串 括号,即分隔我们的 数组 的逗号。然后 trim 每个字符串空格、括号、引号——所有这些我们都不需要。结果,我们有一个字符串数组,每个字符串代表一个 array。
- 然后对每个 array 应用相同的规则,将其分离为值。
请注意,在此解决方案中,所有值都作为字符串串接。
如果你有更多的嵌套层次,它可以用递归的方式重写而不是循环,但它会不太容易理解——我只是提供了一个最小的解决方案,它可以工作:)我相信你可以在很多方面改进它方式。
在 Javascript 中,我有一个字符串需要转换为对象数组。
//ORIGINAL STRING :
var originalString = "[13, "2017-05-22 17:02:56", "Text111"], [25, "2017-05-22 17:03:03", "Text222"], [89, "2017-05-22 17:03:14","Text333"]";
我需要能够遍历每个对象,并使用索引获取 3 个属性。 那将给出(对于第一个数组):
myItem[0] => 13
myItem[1] => "2017-05-22 17:02:56"
myItem[2] => "Text111"
起初我觉得这很简单(可能确实如此),但经过几次尝试后,我仍然卡住了。
请注意 我不能使用 jQuery 因为 运行 一个非常古老的 Javascript 规范:"Microsoft JScript",符合 EcmaScript 3。
谢谢你;)
应该这样做
var regex = /\[([^\]]+)/g;
var originalString = '[13, "2017-05-22 17:02:56", "Text111"], [25, "2017-05-22 17:03:03", "Text222"], [89, "2017-05-22 17:03:14","Text333"]';
var result = regex.exec(originalString);
var container = [];
for (var j = 0; result ? true : false; j++) {
var tokens= result[1].split(',');
var tempContainer = []
for (var i = 0; i < tokens.length; i++) {
tempContainer[i] = tokens[i].replace(/["\s]/g, '');
}
container[j] = tempContainer;
// continue the search
result = regex.exec(originalString);
}
console.log(container);
如果你可以使用JSON.parse
,那么你就可以将[
和]
分别附加到字符串的开头和结尾,然后将其解析为数组的数组。
var originalString = '[13, "2017-05-22 17:02:56", "Text111"], [25, "2017-05-22 17:03:03", "Text222"], [89, "2017-05-22 17:03:14","Text333"]';
var result = JSON.parse("[" + originalString + "]");
console.log(result);
然而,据我所知,JSON.parse
不是 ECMAScript 3 的投诉,所以你必须自己解析它。
这样的事情应该有所帮助:
var originalString = '[13, "2017-05-22 17:02:56", "Text111"], [25, "2017-05-22 17:03:03", "Text222"], [89, "2017-05-22 17:03:14","Text333"]';
function trimString(str, trims) {
var left = 0;
var right = str.length - 1;
while (left < right && trims.indexOf(str[left]) != -1) {
left++;
}
while (left < right && trims.indexOf(str[right]) != -1) {
right--;
}
return str.substr(left, right - left + 1);
}
function splitByCommasOutOfBrackets(str) {
var result = [];
var current = "";
var bracketBalance = 0;
for (var i = 0; i < str.length; i++)
{
switch (str[i]) {
case '[':
current = current + str[i];
bracketBalance++;
break;
case ']':
current = current + str[i];
bracketBalance--;
break;
case ',':
if (bracketBalance === 0) {
result.push(trimString(current, [" ", "[", "]", "\""]));
current = "";
} else {
current = current + str[i];
}
break;
default:
current = current + str[i];
break;
}
}
if (current.length > 0) {
result.push(trimString(current, [" ", "[", "]", "\""]));
}
return result;
}
var arr = splitByCommasOutOfBrackets(originalString);
console.log("1: Split by commas which separate arrays");
console.log(arr);
for (var i = 0; i < arr.length; i++) {
arr[i] = splitByCommasOutOfBrackets(arr[i]);
}
console.log("2: Split every array by the same rules");
console.log(arr);
我不太确定 ECMAScript 3 中存在哪些功能,为此我使用了 MDN。看起来很多函数甚至 String.prototype.trim
在 ECMAScript 3 中都不存在。所以我不得不自己重新实现它。如果我错了并且您可以在 JScript 中使用它们,那么只需使用其中的一些函数即可。
算法的大致思路如下:
- 用逗号 分隔字符串 括号,即分隔我们的 数组 的逗号。然后 trim 每个字符串空格、括号、引号——所有这些我们都不需要。结果,我们有一个字符串数组,每个字符串代表一个 array。
- 然后对每个 array 应用相同的规则,将其分离为值。
请注意,在此解决方案中,所有值都作为字符串串接。
如果你有更多的嵌套层次,它可以用递归的方式重写而不是循环,但它会不太容易理解——我只是提供了一个最小的解决方案,它可以工作:)我相信你可以在很多方面改进它方式。