在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标准。
我感谢你;)
答案 0 :(得分:1)
这样的事情应该做
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);
答案 1 :(得分:1)
如果您可以使用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);
&#13;
但是,据我所知,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);
&#13;
我不太确定ECMAScript 3中存在哪些功能,我使用MDN。看起来ECMAScript 3中不存在像String.prototype.trim
这样的许多函数。所以我必须自己重新实现它。如果我错了,您可以在JScript中使用它们,那么只需使用其中一些功能。
算法的一般概念如下:
请注意,此解决方案中所有值都作为字符串进行了线程化。
如果你有更多的嵌套级别,它可以以递归的方式重写而不是循环,但它不太容易理解 - 我只是提供了一个最小的解决方案,它可以工作:)我相信你可以在很多方面改进它。