将字符串传递给函数以定义属性名称

时间:2012-10-03 15:17:11

标签: javascript parameters

早上好

我想在java脚本中将字符串作为函数参数传递,但字符串将表示我希望函数操作的属性的名称。我以前见过这个,但不太了解它。

下面的函数显示了我所指的“field”参数。它将一个值作为字符串传递,但对名称与字符串值匹配的属性进行操作。

我想要做的是遍历对象数组并仅返回存储在属性中的值,该属性的名称与传递的字符串匹配。我们的想法是拥有一个函数,它可以处理任何具有已添加到数组的属性的对象,并返回任何属性,而无需为每个属性编写循环函数。

下面是这种魔术的一个例子:

listName.sort(sort_by('stringPropertyName', false, function(a){return a.toUpperCase()}));

var sort_by = function(field, reverse, primer){ //http://stackoverflow.com/questions/979256/how-to-sort-an-array-of-javascript-objects
   var key = function(x){return primer ? primer(x[field]) : x[field]};
   return function (a,b){
       var A = key(a), B = key(b);
       return ((A < B) ? -1 :(A > B) ? +1 : 0) * [-1,1][+!!reverse];                  
   }
}

1 个答案:

答案 0 :(得分:4)

如果你想“遍历对象数组并仅返回存储在属性中的值,其名称与传递的字符串匹配”,你可以这样做:

function getValues(array, propname) {
     var values = [];
     for (var i=0; i<array.length; i++) {
         if (typeof array[i][propname] !== 'undefined') {
             values.push(array[i][propname])
         }
     }
     return values;
}

当“{1}}是包含属性名称的变量时,”技巧“是使用obj[propname]而不是obj.propname访问该媒体资源。

例如propname可以window.location

访问

DEMONSTRATION