将字符串转换为多维数组

12

我有一个字符串

 var myString = "['Item', 'Count'],['iPad',2],['Android',1]";

我需要将它转换成一个数组,其中:

myArray[0][0] = 'Item';
myArray[0][1] = 'Count';
myArray[1][0] = 'iPad';
myArray[1][1] = 2;

这个字符串的长度可能会变化,但格式始终如上所示。我已经尝试了拆分和切割以及其他任何我能想到的方法,但都无法解决。

请问有人可以帮忙吗?

4个回答

20

如果字符串是安全的,最简单的方法是将[]连接到开头和结尾,然后 eval它。

var arr = eval("[" + myString + "]");
如果您想要更安全的字符串,请使用双引号,并以相同的方式使用 JSON.parse()
var myString = '["Item", "Count"],["iPad",2],["Android",1]';

var arr = JSON.parse("[" + myString + "]");

这将限制您使用支持的JSON数据类型,但根据您的示例字符串,它将可以正常工作。


@RoyiNamir:这已经在我的答案中提到了,但我添加了修改后的字符串以更清楚地表达。 - I Hate Lazy
太好了!我已经寻找这样的东西有一段时间了!谢谢! - msbarnard
哇!非常感谢 eval 函数。 - bluesony
你需要在结尾添加 ;eval("[" + myString + "];"); - user2074102
eval 是危险的,您不应该在用户可以以任何方式与之交互的任何内容上使用它! - Alexander Craggs

1

编写你的代码像这样

var myString = "[['Item', 'Count'],['iPad',2],['Android',1]]";

而且只是

 var arr = eval(myString);

1

试试这个:

JSON.parse("[['Item', 'Count'],['iPad',2],['Android',1]]".replace(/\'/g,"\""))

enter image description here


0

我尝试使用 eval,但在我的情况下它不起作用...我需要将一个字符串转换成对象数组。这是我的字符串(ajax 请求的结果):

{'printjob':{'bill_id':7998,'product_ids':[23703,23704,23705]}}

当我尝试:

x = "{'printjob':{'bill_id':7998,'product_ids':[23703,23704,23705]}}";
eval(x);

我收到了一个“Unexpected token :”错误。

我的解决方案是:

x = "{'printjob':{'bill_id':7998,'product_ids':[23703,23704,23705]}}"; 
x = "temp = " + x + "; return temp;"
tempFunction = new Function (x);
finalArray = tempFunction();

现在我有了最终数组对象!

希望能够帮到你。


1
new Function(string)和eval一样危险,请确保用户无法更改对象内的任何属性。 - Alexander Craggs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接