【问题标题】:Pass string to function to define property name将字符串传递给函数以定义属性名称
【发布时间】:2012-10-03 15:17:10
【问题描述】:

早安

我想在 java 脚本中将字符串作为函数参数传递,但该字符串将代表我希望函数对其进行操作的属性的名称。我以前看过这个,但不太理解。

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

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

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

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];                  
   }
}

【问题讨论】:

  • 问题到底是什么?
  • 我想了解如何使用字符串来表示属性名称。

标签: javascript parameters


【解决方案1】:

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

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;
}

propname 是包含属性名称的变量时,“技巧”是使用obj[propname] 而不是obj.propname 访问属性。

例如window.location 可以访问为window["location"]

DEMONSTRATION

【讨论】:

  • 是的。在这里编写完全相同的解决方案减去任何验证。 jsfiddle.net/JERSH
  • 这种类型的功能叫什么,以便我可以对这个主题及其工作原理进行更多研究。
猜你喜欢
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2023-03-16
  • 2017-06-26
  • 1970-01-01
  • 2011-04-02
相关资源
最近更新 更多