如何在对象文字赋值中指定动态值

How can I specify dynamic value in object literal assignment?

本文关键字:动态 赋值 对象 文字      更新时间:2023-09-26

这是我通过JSLint:运行代码后得到的

应为":",而看到的却是"+"Book":"'+bookname+'"'第3行第23列

意外的尾部空格。'"书本":"'+书本名+'"'

如果结果在"Book"列中包含"bookid"值,我想在JSON字符串中指定以查找结果(参见下面的第1-4行)。

我知道语法有错误。它运行得很好,直到我决定需要使用本地存储中的值。我不确定如何在这种查询中正确地调用正则变量。怎么了?

var bookname = localStorage.getItem('bookid');
var whereObject = {
    "$and": [{
        '"Book":"'+bookname + '"'
    }
    }, {
        "$or": [{
            "calf_id": {
                "$regex": "^" + value,
                "$options": "i"
            }
        }, {
            "cow_id": {
                "$regex": "^" + value,
                "$options": "i"
            }
        }, {
            "Sire": {
                "$regex": "^" + value,
                "$options": "i"
            }
        }, {
            "Color": {
                "$regex": "^" + value,
                "$options": "i"
            }
        }]
    }]
    };
return JSON.stringify(whereObject);

value是搜索栏中的值。

我试图根据给我的建议来改变它,但后来它只会产生更多的警告,类似于我已经收到的警告。

我基本上需要知道在查询中使用以前定义的变量的正确方法。我不知道正确的语法,也找不到任何东西,只有

'"Book":"'+bookname + '"'

为什么要使用'?我不知道你为什么要那样做
在json中,应该在:字符之前结束字符串。在:之后键入Book的值。

"KEY":"VALUE"

如果Book的值是字符串:

"Book" : "hello this is string"

如果Book的值是一个变量:

"Book": bookname

如果您希望Book具有bookname变量的值,但用引号括起来,则执行

"Book": "'" + bookname + "'"

如果你仔细查看并计算json中的{和}的数量,你会发现这个数字不是偶数!这意味着你有一个匹配错误。以下是没有语法错误的有效json:

{
  "$and": [

       {
         "Book":"bookname"
       },

       {
         "$or": [
             {"calf_id": {"$regex":"^" + value,"$options": "i"}},
             {"cow_id":  {"$regex":"^" + value,"$options": "i"}},
             {"Sire":    {"$regex":"^" + value,"$options": "i"}},
             {"Color":   {"$regex":"^" + value,"$options": "i"}}
         ]
       }

  ]
}