gpt4 book ai didi

javascript - 如何将字符串转换为 JScript 对象数组

转载 作者:行者123 更新时间:2023-11-30 15:18:13 25 4
gpt4 key购买 nike

在 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。

谢谢你;)

最佳答案

如果您可以使用 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 中使用它们,那么只需使用其中的一些函数即可。

算法的总体思路如下:

  1. 括号内用逗号分隔字符串,即分隔我们的数组 的逗号。然后 trim 每个字符串的空格、括号、引号——所有这些我们不需要的东西。结果,我们有一个字符串数组,每个字符串代表一个数组
  2. 然后对每个数组 应用相同的规则,将其分离为值。

请注意,在此解决方案中,所有值都作为字符串进行线程化。

如果你有更多的嵌套级别,它可以用递归的方式重写而不是循环,但它会不太容易理解 - 我只是提供了一个最小的解决方案,它有效 :) 我相信你可以在很多方面改进它。

关于javascript - 如何将字符串转换为 JScript 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44171790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com