2
function myFunction() {
  var item = {};
  item = {id:'myId', rules: {1:'rule1', 2:'rule2'}};
  Logger.log(item);  // {id=myId, rules={2=rule2, 1=rule1}}
  Logger.log(item.rules[1]);  // rule1

  var db = ScriptDb.getMyDb();
  db.save(item);

  var result = db.query({id:'myId'});
  item = result.next();
  Logger.log(item);  // {id=myId, rules={2=rule2, 1=rule1}}
  Logger.log(item.rules[1]);  // undefined, why?

}

期望最后一个日志像原始对象一样返回值“rule1”。为什么现在未定义?

4

2 回答 2

1

一个奇怪的案例,它可能是一个错误。

用下面的代码可以得到你需要的:

...
item = JSON.parse(item.toJson());
Logger.log(item);  // {id=myId, rules={2=rule2, 1=rule1}}
Logger.log(item.rules[1]);  // rule1
...
于 2013-10-30T23:50:06.030 回答
0

使用数值而不是数字键存储和过滤结果的替代途径。

function myFunction() {
  var db = ScriptDb.getMyDb();
  var item1 = {id:'myId', rule:{num:1, details:'rule1'}};
  var item2 = {id:'myId', rule:{num:2, details:'rule2'}};

  var saveResults = db.saveBatch([item1, item2], false);

  var results = db.query({id:'myId'});

  while (results.hasNext()) {
    var item = results.next();
    if (item.rule.num == 1) 
      Logger.log(item.rule.details);  // rule1
  }
}
于 2013-10-31T15:45:23.460 回答