javascript - 使用函数参数查找和对象键值对?

标签 javascript meteor

我试图找到一个键值对值,但我想将键作为参数传递,但它似乎不起作用。

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"
    }...

我希望将变量传递两次,一次用于排序,另一次用于查找值,但它实际上是在寻找显然不存在的键值对“变量”。

我如何让它被视为论点?

最佳答案

这有两个方面:

  1. 使用名称为 variable 的属性创建字段对象而不是文字名称 variable , 和

  2. 根据变量的值(而不是文字名称 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) fields1 .

所以把它们放在一起:

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/

相关文章:

javascript - JS 状态意外更新

javascript - 在javascript中将字符串分割成句子

angularjs - "meteor mongo"与 "Error: EINVAL, invalid argument"崩溃

Meteor/React - 如何等待 Meteor.user()

javascript - 检查下拉状态

javascript - Meteor:两种类型的用户,如何处理复杂的 UserAccounts?

node.js - 在 Ubuntu 14.04.x 上安装 Meteor JS

javascript - 为什么函数在console.log中先执行?

javascript - 如何在 jQuery 上通过鼠标移动来放大和缩小屏幕的一部分?

javascript - 在 javascript 中使 .value 值为 0 而不是 null