我想遍历对象数组,检查对象变量的名称是否等于传递给函数的元素的ID,如果是,则将另一个对象的innerHTML设置为匹配对象的name属性。例如
var samplearray = new Array();
var Guy1 = new Object();
Guy1.name = "Bill";
Guy1.health = 100;
samplearray.push(Guy1);
Guy2.name = "Dan";
Guy2.health = 125;
samplearray.push(Guy2);
//this is all done previously by a function on pageload
function afunction(id){
for (item in samplearray)
{
if (item == id.id){
document.getElementById("changeme").innerHTML=samplearray[item].name;
}
}}
if中的“ item”似乎没有引用变量的名称。如果我使用自定义的var_dump函数进行检查,它会告诉我该值为“ 11”而不是“ Guy1”。我不知道为什么。
编辑:
固定的for循环:
for (var item in samplearray)
{
if (samplearray[item].varname == id.id){
document.getElementById("changeme").innerHTML=samplearray[item].name';
}}
我不太了解您在做什么,但是这里有一些关于您代码的注释:
> var samplearray = new Array();
> var Guy1 = new Object();
> Guy1.name = "Bill";
> Guy1.health = 100;
> samplearray.push(Guy1);
> Guy2.name = "Dan";
> Guy2.health = 125;
> samplearray.push(Guy2);
使用对象和数组初始化程序*被认为是更好的样式(并且更简洁):
var guy1 = {name: "Bill", health: 100};
var guy2 = {name: "Dan", health: 125};
var samplearray = [guy1, guy2]
同样,按照惯例,以大写字母开头的变量名称保留给构造函数使用。
> //this is all done previously by a function on pageload
与元素进行交互之前,您需要等待元素可用,等待load事件是这样做的一种方法。
> function afunction(id) {
什么是ID?稍后您似乎将其视为对象。
嗯,所以id是对元素的引用,id.id
应该返回元素id。
> for (item in samplearray) {
您应该声明变量,以便它们不会成为全局变量,因此:
for (var item in samplearray) {
在数组中使用..in通常不是一个好主意,因为返回成员的顺序可能与它们的索引顺序不同。此外,它将返回所有可枚举的属性,包括原型链上的那些属性,因此,如果不是您想要的属性,则应避免该情况。使用for循环更好,因此您可以保证顺序并避免使用非数字可枚举属性:
var item;
for (var i=0, iLen=samplearray.length; i<iLen; i++) {
item = samplearray[i];
> if (item == id.id){
因此item将是对samplearray的Object成员的引用,并且id.id
是一个字符串,因此它将始终返回false,以下代码均不会运行。
> document.getElementById("changeme").innerHTML=item.name;
在for..in版本中,item是字符串属性名称,但是您将其视为对象,因此将引发错误并且脚本执行将停止。
在for循环版本中,它是对samplearray中的一个对象的引用,因此上述内容应该“起作用”。
> document.getElementById("changeme").innerHTML=samplearray[item].name;
如果item是数字属性名称而不是其他一些可枚举属性,则该方法应该可以使用。
> //neither does this
> } }}
*
初始化器是创建对象(例如对象,数组,正则表达式等)的表达式的通用术语。如果初始化程序使用文字值,则可以将其称为“文字”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句