2014-02-14 13 views
1

这里是我正在构建的一个Node Webkit WebSQL包装器的摘录,我遇到了一个问题。请参阅下面的<----一行。按字母顺序排列的JavaScript对象

get_columns是一个简单的JavaScript数组:

['id','group_name','description'] 

但是,当他们出来的数据库对象(又名results.rows.item(i)):

{'description','group_name','id'} 

这是因为浏览器或JavaScript要排序所有对象按字母顺序?

db.transaction(function(tx) { 
    var sql = 'SELECT ' + get_columns + ' FROM ' + table; 
    tx.executeSql(sql, [], function(tx, results) { 
     if (results.rows.length) { 
      for (var i = 0; i < results.rows.length; i++) { 
       _data.push(results.rows.item(i)); // <---- columns from WebSQL are in alphabetical order, so not cool. 
      } 
     } 
     deferred.resolve(_data); 
    }); 
}); 

我的想法是处理对象,并将对象的值放入我的数组中作为每个键的值。

+1

相关:HTTP ://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order – epascarello

+0

那么我的预感是正确的。我将不得不解释结果对象,并在预期的列上执行1:1匹配并分配值。 –

+0

究竟是什么问题?无论如何,如果它是一个对象,您将通过属性名称来访问它。或者你想要将每行的数组推到'_data'? – Bergi

回答

1

使用JSON.stringify的结果作为第一个参数和阵列作为第二个参数,以执行顺序:

function foo(get_columns) 
    { 
    var results = {"a":1,"b":2,"c":3}; 

    _data = JSON.stringify(results, get_columns); 
    return _data; 
    } 

foo(['c','a','b']) 

参考