我有一个具有大约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值===“one”然后list.one等制作单个函数。还有其他任何想法吗?我考虑过使用数组但我更喜欢让代码易于阅读,因为列表值具有特定的在其他功能中使我更容易使用的名称。
提前感谢您提供任何帮助
答案 0 :(得分:5)
尝试这样的事情:
function inc(value,amount) {
list[value] += amount;
}
答案 1 :(得分: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");
答案 2 :(得分:1)
是否可以引用变量?
没有。但是可以引用一个对象,并使用variable property names。这实际上就是你已经拥有的,所以你可以将你的功能改为
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
动词。
答案 3 :(得分:1)
list[value] += amount;
其中value是“one”,“two”等字符串
你也可以传递对象来增加:
function(obj, value, amount, math) {
obj[value] += math;
}
但你应该使用数组+循环/重构。