2014-01-13 66 views
1

当我使用date_narrow(pdb, "datepub", "1980", "2000")调用此函数时,我期望返回的计数为2,并且选择将pdb [0]。设置为false。相反,我的调试器显示arr [k] .dfield总是未定义的,而我希望它是pdb [k] .datepub。也就是说,我试图在运行时选择对象arr [k]的属性。有关如何正确执行此操作的任何建议?以编程方式在javascript中选择对象的属性

var date_narrow = function (arr, dfield, earlier_date, later_date) { 
    var count = 0; 
    for (var k = 0; k < arr.length; k++) { 
     if (arr[k].selected) { 
      // following are string comparisons 
      if ((arr[k].dfield < earlier_date) || (arr[k].dfield > later_date)) { 
       arr[k].selected = false; 
      } else { 
       count = count + 1; 
      } 
     } 
    } 
    return (count); 
}; 

pdb = [{ 
    datepub: "2012", 
    selected: true 
}, { 
    datepub: "1999", 
    selected: true 
}, { 
    datepub: "1980", 
    selected: true 
}]; 

回答

2

在JavaScript中,数组语法(obj[...])也适用于通过名字来访问一个对象的属性:

var date_narrow = function (arr, dfield, earlier_date, later_date) { 
    var count = 0; 
    for (var k = 0; k < arr.length; k++) { 
     if (arr[k].selected) { 
      // following are string comparisons 
      if ((arr[k][dfield] < earlier_date) || (arr[k][dfield] > later_date)) { 
       arr[k].selected = false; 
      } else { 
       count = count + 1; 
      } 
     } 
    } 
    return (count); 
}; 

Demonstration

+0

该工程,谢谢。我认为,只要dfield是一个合法的javascript名称而不是保留字的字符串,arr [k] .dfield的含义与arr [k] [dfield]相同,并且更易于阅读。显然他们不是这个意思。你可以解释吗? – user1416227

+0

@ user1416227他们的意思是不同的东西。 'x.prop'表示'从对象'x''获得名为'prop'的属性,而'x [prop]'表示'获得名为'prop'的变量的值,然后获得对象'x'的属性它具有该名称(或数组索引)“。 –

相关问题