我试图找到一个键值对值,但我想将键作为参数传递,但它似乎不起作用。
function drawPieChart(){
var findData = function(variable){
return dailyLog.find({createdBy: Meteor.user().username}, {fields: {variable: 1}}).fetch()[0].variable;
};
var data = [
{
value: findData(adherence),
color: "#CBDDE7"
}...
我希望将变量传递两次,一次用于排序,另一次用于查找值,但它实际上是在寻找显然不存在的键值对“变量”。
我如何让它被视为论点?
最佳答案
这有两个方面:
使用名称为
variable
的属性创建字段对象而不是文字名称variable
, 和根据变量的值(而不是文字名称
variable
)访问结果字段
首先处理 #2 因为它更容易:在 JavaScript 中,您可以使用点符号和属性名称文字 (obj.foo
) 或使用方括号符号和属性名称字符串来访问对象的属性*(obj["foo"]
)。在后一种情况下,字符串可以是任何表达式的结果,包括变量查找。所以如果variable
包含 "foo"
, 然后 obj[variable]
将获取或设置 foo
属性(property) obj
.
回到 #1:现在,您必须创建要作为 fields
传递的对象首先,然后通过括号表示法而不是在对象初始值设定项中分配属性值:
var fields = {};
fields[variable] = 1;
如果variable
包含 "foo"
, 然后 fields[variable] = 1
设置 foo
属性(property) fields
至 1
.
所以把它们放在一起:
var findData = function(variable){
var fields = {};
fields[variable] = 1;
return dailyLog.find({createdBy: Meteor.user().username}, {fields: fields}).fetch()[0][variable];
// Note ------------------------------------------------------------------------------^--------^
};
在 JavaScript 的下一个版本 ECMAScript6(又名 ES6)中,您将能够在对象初始值设定项中使用“计算属性名称”执行#1(并且仍然使用方括号表示法检索它)。也许不足为奇,计算属性名称使用...括号!
// ES6 only!!
var findData = function(variable){
return dailyLog.find({createdBy: Meteor.user().username}, {fields: {[variable]: 1}}).fetch()[0].[variable];
// Note ------------------------------------------------------------^--------^ --- and ---------^--------^
};
* 旁注:在 ES6 中,括号符号可以与称为 Symbols
的东西一起使用以及字符串。这与你的问题无关,但我在上面说了“字符串”,很快这就不是真的了,所以......
关于javascript - 使用函数参数查找和对象键值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31223421/