【问题标题】:Dynamically calling upon similar objects in javascript?动态调用javascript中的类似对象?
【发布时间】:2015-08-07 17:42:17
【问题描述】:

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

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+count+Object.foo.push("some value");
person+count+Object.bar.push("some other value");

但是当我这样做时,控制台会显示(我假设是正确的)person is not defined

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

var personObject = [person1Object, person2Object, person3Object, person4Object]
personObject[count].foo.push("some value");

但这也不起作用。另外,如果可以的话,我想避免使用 if 语句。

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

【问题讨论】:

    标签: javascript variables object


    【解决方案1】:

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

    所以这样的事情应该可以工作:

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

    如果您需要在节点中执行此操作,您将执行相同的操作,但使用 global 代替,所以:

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

    【讨论】:

    • 这对我有用。谢谢!我担心我需要添加一堆 if 语句,但这解决了我的问题
    【解决方案2】:

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

    var person = Array.apply(null, { length: 4 }).map(function () {
        return {
            foo: [],
            bar: []
        };
    });
    
    //access
    person[1].foo.push(42);
    document.getElementById('out').innerHTML = JSON.stringify(person, null, 4);
    &lt;pre id="out"&gt;&lt;/pre&gt;

    【讨论】:

    • 我尝试使用数组,但由于某种原因它拒绝为我工作
    【解决方案3】:

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

    for(var i=0; i < 4; i++){
       window['person'+i+'Object'].foo.push("some value");
    }
    

    但这并不好,因为它依赖于window,您不能将代码移动到某些函数中,也不能更改名称。

    第二种方法是正确的做法。 IE。将相似的对象放入数组中循环处理。遇到的问题是由函数和变量的同名引起的。命名变量index 并且可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      • 2014-04-30
      相关资源
      最近更新 更多