Javascript:循环遍历未知数量的对象文本

Javascript:循环遍历未知数量的对象文本,javascript,Javascript,我有一个以这种方式命名的对象列表: var p1 = {}; var p2 = {}; p1.name = "john"; p1.hobby = "collects stamps"; p2.name = "jane"; p2.hobby = "collects antiques"; 我知道如何循环p1和p2来收集属性,前提是我知道这些p对象文字有多少。这是我的问题,我并不总是知道会有多少这样的p对象文本。有时上升到p2,有时上升到p20 如果我知道所有的对象都有相同的前缀,有没有办法在它们之间

我有一个以这种方式命名的对象列表:

var p1 = {};
var p2 = {};
p1.name = "john";
p1.hobby = "collects stamps";
p2.name = "jane";
p2.hobby = "collects antiques";
我知道如何循环p1和p2来收集属性,前提是我知道这些p对象文字有多少。这是我的问题,我并不总是知道会有多少这样的p对象文本。有时上升到p2,有时上升到p20

如果我知道所有的对象都有相同的前缀,有没有办法在它们之间循环


编辑:我无法更改获取对象列表的方式。它是以这种格式提供给我的…

为什么不将它们全部存储在一个顶级对象文本中?这将使列举它们变得更容易

例如:

等等

[编辑]

如果它们是本地变量,则无法更改此数据的格式,可能必须使用eval。 别开枪打我:

var p1 = {};
var p2 = {};
p1.name = "john";
p1.hobby = "collects stamps";
p2.name = "jane";
p2.hobby = "collects antiques";

var found = true, c = 1;

while(found) {
    try {
        var obj = eval('p' + c);
        c++;
        console.log(obj);
    } catch(e){
        found = false;
    }
}

我不建议使用此选项,我建议更改您正在接收的数据的格式,但这是一种可能的解决方案。

您应该将它们放在由单个变量引用的数组中

var p = [];
p.push({   
    name:"john",
    hobby:"collects stamps"
}, {
    name:"jane",
    hobby:"collects antiques"
});
然后循环数组,并枚举每个对象

for( var i = 0; i < p.length; i++ ) {
    for( var n in p[i] ) {
        console.log( p[i][n] );
    }
}
此循环将一直运行,直到
p(n)
global返回错误的值


因此,只要找到一个真实值,并且它的
类型是
'object'
,您将迭代该对象。

如果我们做出以下假设:

  • 对象是全局的
  • 数字后缀是连续的
…然后,以下工作:

for (var i = 1; window["p" + i] !== undefined; i++) {
    console.log(window["p" + i]); // loop over each object here
}

如果所有数据都存储在一个变量或几个变量中,则可以将其推入数组

var data = "....JSON";
var a = [];
a.push(data);
Push在基本意义上不断向数组中添加内容。 您还可以弹出以删除最后推送的数据

在这里看一下其他方法:


我无法控制如何接收对象列表。因此,将它们全部存储在一个顶级对象文本中需要一些技巧,因为我必须读入输入,然后在循环之前重新格式化。如果这是唯一的办法,我会的。你到底是怎么收到物品清单的?您在什么范围内接收它们?我从post调用的响应中接收对象列表。因此,post响应以纯文本形式呈现给我,当我阅读它时,范围就是您所看到的。您应该以JSON格式传输此数据,而不是。。这是可能的吗?是的,你是对的,这在JSON格式中会更好。不幸的是,我无法控制web服务如何向我吐出数据。我喜欢这一切。因此,假设我无法控制数据是如何提供给我的。如何将未知数量的对象推入单个数组?@newbieProgrammer:当前数据是如何给出的?您是说对象作为单个
p1
p2
等变量添加到脚本中吗?如果是这样的话,事情就有点不同了。是的,你完全正确。给我的数据是作为单独的p#对象文本提供的。@newbieProgrammer:如果它们是全局变量,那么您可以作为
窗口
对象的属性访问它们。我在我的答案中添加了一个解决方案……不管怎样,我看到这个解决方案基本上测试了p#,看看它是否未定义,如果没有,读取p#的属性,如果它未定义,我可以停止吗?让我测试一下,然后再给你回复。谢谢你。+1呵呵,我刚刚在我的答案中添加了这个解决方案,但直到现在才看到你的解决方案!
for (var i = 1; window["p" + i] !== undefined; i++) {
    console.log(window["p" + i]); // loop over each object here
}
var data = "....JSON";
var a = [];
a.push(data);