嗨,我是JavaScript的新手,我对如何处理像下面这样的对象感到有点困惑。如何将其转换为数组pt,其中每个条目都具有属性selid x,y,z?
这就是我在Chrome控制台中看到的:Object {pt[2][y]: "1.3571934700012207", pt[0][selid]: "2", pt[0][z]: "0", pt[3][x]: "3.6684491634368896", pt[2][z]: "0"…}
如果我尝试访问pt,如下例所示:
var X = pt[2].x;I get和错误"Cannot read property of undefined“。我假设这是因为这个对象更像是一个字典,键是"pt2“,值是"1.3571934700012207”。然而,我想像数组pt一样访问它,它的对象具有属性x,y,z,selid。有没有办法将数据转换/解析成我想要的格式?在此之前非常感谢。
发布于 2012-12-02 02:26:46
你在评论中说过,你做console.log(data)是为了获取obj内容。所以也许你应该这么做
var X = data["pt[2][x]"];如果你想把它转换成数组pt,你应该这样做:
var data = {
"pt[0][x]" : 1,
"pt[1][x]" : 2,
"pt[2][y]" : 3,
"pt[2][z]" : 3
};
var pattern = /^pt\[([^\]]+)\]\[([^\]]+)\]$/i ;
var pt = [];
for( var key in data ){
if ( pattern.test(key) ){
var m = key.match(pattern);
if( !pt[m[1]] ) pt[m[1]] = {};
pt[m[1]][m[2]] = data[key];
}
}
alert(pt[0].x)发布于 2012-12-02 02:58:47
这是可怕的不可读,所以我为此道歉。
但是你可以试试这个:
var v = {pt:new Array()};
for(var a in data) eval("if(!v." + /pt\[\d+\]/.exec(a) + ") v." + /pt\[\d+\]/.exec(a) + " = {}; v." + a.replace(/\]\[/,"][\"").replace(/\]$/,"\"]") + " = " + data[a]);那么v应该有你想要的东西。
(它只是创建/执行以下几行代码:
if(!v.pt[2]) v.pt[2] = {}; v.pt[2]["y"] = 1.3571934700012207
if(!v.pt[0]) v.pt[0] = {}; v.pt[0]["selid"] = 2
if(!v.pt[0]) v.pt[0] = {}; v.pt[0]["z"] = 0
if(!v.pt[3]) v.pt[3] = {}; v.pt[3]["x"] = 3.6684491634368896
if(!v.pt[2]) v.pt[2] = {}; v.pt[2]["z"] = 0)
发布于 2012-12-02 03:36:22
答案已经选择,但这里是原始请求格式的JSON表示法
var pt=[
{x:0,y:1,z:2,strid:"string"},
{x:5,y:5,z:5,strid:"string2"}
];所以现在你可以像这样做你的循环:
for(i=0;i<pt.length,i++){
alert("x is:"+pt[i].x+" y is:"+pt[i].y+
" z is:"+pt[i].z+" strid is:"+pt[i+].strid)
}https://stackoverflow.com/questions/13662057
复制相似问题