有兩個方面是:
創建等領域的名字對象的屬性是variable
而不是字面名稱variable
值,並根據
訪問所產生的場對變量的值(而不是文字名稱variable
)
首先處理#2是因爲它更簡單:在JavaScript中,可以使用點符號和屬性名稱文字(obj.foo
)或使用括號表示法和屬性名稱字符串 *(obj["foo"]
)訪問對象的屬性。在後一種情況下,字符串可以是任何表達式的結果,包括變量查找。因此,如果variable
包含"foo"
,那麼obj[variable]
將在obj
上獲取或設置foo
屬性。
回到#1:現在,你必須創建你打算通過支架符號,而不是一個對象初始化通過爲fields
第一,然後分配屬性值的對象:
var fields = {};
fields[variable] = 1;
如果variable
包含"foo"
,則fields[variable] = 1
將foo
屬性設置爲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
以及字符串中使用。這是不相關的問題,但我說:「串」上,很快,不會是真的,那麼......
+1這一點。如果你不知道你會在一個對象提前致電物業,說,如果這是一個從參數的方法,你需要使用支架'[變量]'符號,而不是點'.variable'符號。 – OceansOnPluto
@ T.J.Crowder哥們,非常感謝!完美解決它,我很高興,完美的作品!謝謝!! –