【发布时间】:2012-01-08 14:49:50
【问题描述】:
我有以下(示例)对象数组:
var theArray = [
{theId:'1', num: 34},
{theId:'2', num: 23},
{theId:'5', num: 26}
];
还有这个函数,它可以很好地循环它们:
function printValues() {
var i = 0;
for(i; i<theArray.length; i++) {
var obj = theArray[i];
document.getElementById('result1').innerHTML += obj.theId + ' = ' + obj.num + '<br>';
}
}
但是,如果我想通过使用函数变量访问其中的对象来抽象此函数以用于类似数组,如下所示:
function printValuesVar(arr,elemId,arrId,arrNum) {
var i = 0;
for(i; i<arr.length; i++) {
var obj = arr[i];
document.getElementById(elemId).innerHTML += obj.arrId + ' = ' + obj.arrNum + '<br>';
}
}
'undefined' 是如下调用的结果(正如我所期望的那样,因为 'arrId' 不是对象名称):
printValuesVar(theArray,'result2','theId','num');
如何使用传递给函数变量的值按名称访问数组中对象的值?
针对反模式重写了以下建议:
function printValuesVar(arr,elemId,arrId,arrNum) {
var i = 0;
var content = '';
for(i; i<arr.length; i+=1) {
var obj = arr[i];
content += obj[arrId] + ' = ' + obj[arrNum] + '<br>';
}
document.getElementById(elemId).innerHTML = content;
}
【问题讨论】:
-
您的代码包含几个反模式:(1)您在循环中通过
getElementById查询 - 没有必要这样做。只需事先获得参考; (2) 您在循环内分配给innerHTML- 再次不需要。您希望将 DOM 操作保持在最低限度。用循环构造 HTML 字符串,然后在循环之后 赋值给innerHTML。 -
+1 获得指导 - 因为这是一个学习过程,所以我重写了函数(在上面添加)以纳入您的建议,之前查看下面的示例。现在我将尝试 PointedEars 的建议。
标签: javascript arrays function object undefined