簡體   English   中英

在Javascript對象中聲明一個不是字符串的屬性

[英]Declaring a property in a Javascript object that ISN'T a string

我正在嘗試構建一個javascript對象以傳遞給MongoDB 此數據庫使用運算符$or允許您一次搜索屬性中的多個鍵。

因此, $or運算符不能使用引號,因為它實際上是查找函數中的運算符。

作為參考,查找函數如下所示:

db.inventory.find( { price:1.99, $or: [ { qty: { $lt: 20 } }, { sale: true } ] } )

我找到了一種從某些變量中“構建” $or屬性的方法,但由於某種原因,屬性名稱一直被視為字符串。 這是我的代碼:

    var criteria = { $or: []};

    properties.forEach(function(property) {
        var propParts = property.split('=');
            if(!(propParts[1].indexOf('&') === -1)){
                var value = propParts[1].match(/[-'"\w\s]+/g);
                    for (var i = 0; i<value.length; i++){
                        var tempObj = {};
                        tempObj[propParts[0]] = value[i];
                        criteria.$or.push(tempObj);
                    }
            }else{       
            criteria[propParts[0]] = new RegExp(propParts[1], "i");
        }
    });

if(criteria.$or.length<=0){
    delete criteria.$or;
}
console.log(criteria);

在我的控制台中,這將輸出為:

{ '$or': [ { designer: 'abc' }, { designer: 'def' } ] }

我在其他地方使用類似的代碼(使用$push代替$or )並且它工作正常,我以完全相同的方式聲明它。

是否可以確保該屬性被視為字符串? 我怎么能在這里實現這個目標?

Javascript對象鍵始終強制為字符串。 你可以在對象文字{key: 0}指定一些沒有引號的{key: 0}或者使用點符號object.key = 0這只是鍵的語法糖,它也會發生與標識符的生成相匹配。 '$或'是有效的JavaScript標識符,因此您可以說:

{$or: [...]}

要么

{"$or": [...]}

要么

{'$or': [...]}

而且他們都是等同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM