0

我有一个包含大约 30 个“值”或任何名称的对象,例如:

var list = new Object();
list.one = 0;
list.two = 0;
list.three = 0;
...
list.thirty = 0;

有没有一种简单/有效的方法让我能够增加列表对象的值?

例如,假设有 100 个按钮,如果按下每个按钮,则值会增加一定量。我想做的是一个简短的功能,例如:

function test( value, amount, math ) {
   if( math === "add" ) {
   value += amount;
   } else if( math === "sub" ) {
   value -= amount;
   }
}

但是整个值的东西不起作用=(。我能想到的唯一另一种方法是创建30个函数,每个函数都做与上面相同的事情,但每个函数都指定要添加或减去的列表值。或制作一个具有 if value === "one" then list.one 等的单个函数。还有其他想法吗?我曾考虑过使用数组,但我希望代码易于阅读,因为列表值具有特定的名称其他功能对我来说很容易。

提前感谢您的帮助

4

4 回答 4

5

尝试这样的事情:

function inc(value,amount) {
  list[value] += amount;
}
于 2013-07-31T18:57:04.580 回答
1

您可以按名称作为字符串访问属性:

function test(obj, name, amount, math) {
  switch (math) {
    case "add":
      obj[name] += amount;
      break;
    case "sub":
      obj[name] -= amount;
      break;
  }
}

使用例如调用它:

test(list, "one", 1, "add");
于 2013-07-31T18:58:13.820 回答
1

是否可以引用变量?

不可以。但是可以引用一个对象,并使用变量属性名称。这实际上是您已经拥有的,因此您可以将功能更改为

function test( value, amount, math ) {
    if( math === "add" ) {
        list[value] += amount;
    } else if( math === "sub" ) {
        list[value] -= amount;
    }
}

test("one", 100, "add")并用而不是调用它test(list.one, 100, "add")。顺便说一句,我建议只使用负值而不是add/sub动词。

于 2013-07-31T19:00:42.770 回答
1
list[value] += amount;

其中 value 是一个字符串,如“one”、“two”等。

你也可以传入对象来增加:

function(obj, value, amount, math) {
  obj[value] += math;
}

但是您可能应该使用数组+循环/重构。

于 2013-07-31T19:02:01.783 回答