我有一个大约有 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 创建一个函数“然后列出一个等等。还有其他想法吗?我考虑过使用数组,但我更希望代码易于阅读,因为列表值具有特定的名称,可以让我在其他函数中轻松使用。
尝试这样的事情:
function inc(value,amount) {
list[value] += amount;
}
是否可以引用变量?
不。但可以引用一个对象,并使用变量属性名称。这实际上是您已经拥有的,所以您可以将您的功能更改为
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
动词。
您可以按字符串形式的名称访问属性:
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");
list[value] += amount;
其中 value 是一个字符串,如“one”、“two”等
你也可以传入对象来递增:
function(obj, value, amount, math) {
obj[value] += math;
}
但是你可能应该使用数组+循环/重构。