动态调用javascript中的类似对象?

动态调用javascript中的类似对象?,javascript,variables,object,Javascript,Variables,Object,我提前为标题道歉,但我不知道如何表达我想问的问题(如果以前有人问过类似的问题,我就不知道如何搜索它)。 因此,我的程序中有四个非常相似的对象,因此我将它们区分为: var person1Object = { foo: [], bar: [] } var person2Object = { foo: [], bar: [] } var person3Object = { foo: [], bar: [] } var person4Object = {

我提前为标题道歉,但我不知道如何表达我想问的问题(如果以前有人问过类似的问题,我就不知道如何搜索它)。 因此,我的程序中有四个非常相似的对象,因此我将它们区分为:

var person1Object = {
    foo: [],
    bar: []
}
var person2Object = {
    foo: [],
    bar: []
}
var person3Object = {
    foo: [],
    bar: []
}
var person4Object = {
    foo: [],
    bar: []
以及按下按钮时通过另一个函数计算1到4的变量,如下所示:

var count = 1;
function count() {
    if (count < 4) {
        i++;
    } else {
        i = 1;
    }
}
$("#button").on("click", function () { count(); });
但当我这样做时,控制台会说(我也这么认为)person没有定义

我尝试过使用这样的数组:

var personObject = [person1Object, person2Object, person3Object, person4Object]
personObject[count].foo.push("some value");
但这也不起作用。此外,如果可以的话,我希望避免使用if语句


如果不使用一堆if语句,我如何操作这些对象?

您可以通过窗口对象(无论如何,在浏览器中)访问具有动态名称的对象

因此,类似这样的方法应该有效:

window['person'+count+'Object'].foo.push("some value");
window['person'+count+'Object'].bar.push("some other value");
如果需要在node中执行此操作,您也可以执行相同的操作,但可以使用
global
,因此:

global['person'+count+'Object'].foo.push("some value");
global['person'+count+'Object'].bar.push("some other value");

您可以通过窗口对象(无论如何,在浏览器中)访问具有动态名称的对象

因此,类似这样的方法应该有效:

window['person'+count+'Object'].foo.push("some value");
window['person'+count+'Object'].bar.push("some other value");
如果需要在node中执行此操作,您也可以执行相同的操作,但可以使用
global
,因此:

global['person'+count+'Object'].foo.push("some value");
global['person'+count+'Object'].bar.push("some other value");

为什么不使用一个简单的数组呢?(从0到4运行)

var person=Array.apply(null,{length:4}).map(函数(){
返回{
foo:[],
酒吧:[]
};
});
//通路
人[1].foo.push(42);
document.getElementById('out').innerHTML=JSON.stringify(person,null,4)

为什么不使用简单数组?(从0到4运行)

var person=Array.apply(null,{length:4}).map(函数(){
返回{
foo:[],
酒吧:[]
};
});
//通路
人[1].foo.push(42);
document.getElementById('out').innerHTML=JSON.stringify(person,null,4)

第一种方法失败,因为您需要知道作用域,并用字符串代替。我假设这段代码是在浏览器和顶层启动的。应该是这样的

for(var i=0; i < 4; i++){
   window['person'+i+'Object'].foo.push("some value");
}
for(变量i=0;i<4;i++){
window['person'+i+'Object'].foo.push(“某些值”);
}
但是这并不好,因为它依赖于
窗口
,您不能将代码移动到某些函数中,也不能更改名称


第二种方法是正确的做法。也就是说,将相似的对象放入数组中,以循环方式处理它们。遇到的问题是由函数和变量的名称相同引起的。Name变量
索引
将起作用

第一种方法失败,因为您需要知道范围,并用字符串代替它。我假设这段代码是在浏览器和顶层启动的。应该是这样的

for(var i=0; i < 4; i++){
   window['person'+i+'Object'].foo.push("some value");
}
for(变量i=0;i<4;i++){
window['person'+i+'Object'].foo.push(“某些值”);
}
但是这并不好,因为它依赖于
窗口
,您不能将代码移动到某些函数中,也不能更改名称


第二种方法是正确的做法。也就是说,将相似的对象放入数组中,以循环方式处理它们。遇到的问题是由函数和变量的名称相同引起的。Name变量
索引
并将起作用

这对我很有效。非常感谢。我担心我需要添加一堆if语句,但这解决了我的问题这对我来说很有效。非常感谢。我担心我需要添加一堆if语句,但这解决了我的问题我尝试使用数组,但由于某些原因它对我无效我尝试使用数组,但由于某些原因它对我无效