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

Javascript 使用函数参数查找对象和键值对?,javascript,meteor,Javascript,Meteor,我试图找到一个键值对值,但我想将该键作为参数传入,但它似乎不起作用 function drawPieChart(){ var findData = function(variable){ return dailyLog.find({createdBy: Meteor.user().username}, {fields: {variable: 1}}).fetch()[0].variable; }; var data = [ { value: findDat

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

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”,它显然不存在


我如何使它被视为论点?

这有两个方面:

  • 使用名为
    变量
    的值而不是文字名
    变量
    的属性创建fields对象,以及

  • 根据变量的值(而不是变量的文字名称)访问结果字段

  • 首先处理#2是因为它更简单:在JavaScript中,您可以使用点符号和属性名称文字(
    obj.foo
    ),或者使用括号符号和属性名称字符串*(
    obj[“foo”]
    )访问对象上的属性。在后一种情况下,字符串可以是任何表达式的结果,包括变量查找。因此,如果
    variable
    包含
    “foo”
    ,则
    obj[variable]
    将获取或设置
    obj
    上的
    foo
    属性

    回到#1:现在,您必须首先创建要作为
    字段传递的对象,然后通过括号表示法而不是在对象初始值设定项中指定属性值:

        var fields = {};
        fields[variable] = 1;
    
    如果
    variable
    包含
    “foo”
    ,则
    字段[变量]=1
    字段上的
    foo
    属性设置为
    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中,方括号表示法可以与称为
    符号的东西以及字符串一起使用。这与你的问题无关,但我在上面说了“字符串”,很快这就不是真的了,所以…

    +1。如果您事先不知道要在对象中调用的属性,比如如果它是方法中的参数,则需要使用括号
    [variable]
    符号,而不是点
    .variable
    符号。@t.J.Crowder dude,非常感谢!完美地解决了它,我很高兴,工作完美!!非常感谢。