来自数组值的Javascript动态变量名称(Appcelerator Titanium)

|| 我正在使用Titanium应用程序,并且已经构建了运行sqlite数据库查询并返回结果集(数组)的功能。 我不会太在意Titaniums的细节,因为它不会对我面临的问题产生太大的影响。 基本上,任何查询都可以使用此函数执行,因此自然地,一旦执行查询,您就需要一个与某些数据库列名相对应的数据数组。这是我遇到的问题。通过钛系统的工作方式,我需要将结果推送到结果数组中,如下所示:
var resultSet = conn.execute(\'SELECT * FROM some_table WHERE parent = ?\', parent);
    if (resultSet.isValidRow()) {
        result = {
            id: resultSet.fieldByName(\'id\'),
            name: resultSet.fieldByName(\'name\'),
            parent: resultSet.fieldByName(\'parent\'),
            order: resultSet.fieldByName(\'order\')
        };
    }
好的,那就很好。但是它不够动态。当您想从具有不同字段的其他表中进行选择时会发生什么。 ID,名称,父母和订单显然无法正常工作。 我正在尝试做的是获取一个数组(我已经拥有)并将这些值用作它们的名称,如下所示:
var resultSet = conn.execute(<!-- SQL IS IN HERE -->);
var fieldCount = resultSet.fieldCount();
var fields = [];
for(i=0;i<fieldCount;i++) {
    fields.push(resultSet.fieldName(i));
};
// At this point we have an array \'fields\' which contains all the field names.

var results = [];
    while (resultSet.isValidRow()) {
    results.push({
// START OF PROBLEM
        for(i=0; i < fields.length; i++)
        {
            fields[i]: resultSet.fieldByName(fields[i]);
        }
// END OF PROBLEM
    });
    resultSet.next();
};
resultSet.close();
上面注释的开始/结束显示了问题代码。我意识到它是错误的,但是无法弄清楚应该怎么做。可以说字段数组包含\'id \'和\'name \',我需要变量来覆盖这两个变量,但是它们必须是动态的-我想避免必须为每个表创建一个新的javascript函数。 我应该指出,我是一个PHP专家,我在JS方面的经验非常有限。我一直以此为契机来学习,但是我无法理解这一点!非常抱歉,如果它的解释不够清楚,希望JS专家可以在这里伸出援手! 干杯     
已邀请:
几乎可以理解,除了您试图遍历对象文字中的fields数组外,这是完全无效的-您只能在对象文字中包含键值对。
var resultSet = conn.execute(<!-- SQL IS IN HERE -->);
var fieldCount = resultSet.fieldCount;
var fields = [];
for(var i = 0; i < fieldCount;i++) {
    fields.push(resultSet.fieldName(i));
};

var results = [];
while (resultSet.isValidRow()) {
    for(var i=0; i < fields.length; i++) {
       results[i] = {};
       results[i][fields[i]] = resultSet.fieldByName(fields[i]);
    }
    resultSet.next();
};
resultSet.close();
    
尝试这个
Ti.UI.backgroundColor= \'white\';
var win= Titanium.UI.createWindow();


var db= Titanium.Database.open(\'MY_DB\');

db.execute(\'CREATE TABLE IF NOT EXISTS USERS1 (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, PHONE_NUMBER, IL TEXT)\');
db.execute(\'DELETE FROM USERS1\');
db.execute(\'INSERT INTO USERS1(NAME, PHONE_NUMBER, IL) VALUES(?, ?, ?)\', \'SALIH-1\',\'1-SALIH\', \'RIZE-1\');
db.execute(\'INSERT INTO USERS1(NAME, PHONE_NUMBER, IL) VALUES(?, ?, ?)\', \'AHMET-2\',\'2-AHMET\', \'RIZE-2\');
db.execute(\'INSERT INTO USERS1(NAME, PHONE_NUMBER, IL) VALUES(?, ?, ?)\', \'HAKAN-3\',\'3-HAKAN\', \'RIZE-3\');
db.execute(\'INSERT INTO USERS1(NAME, PHONE_NUMBER, IL) VALUES(?, ?, ?)\', \'GALIP-4\',\'4-GALIP\', \'RIZE-4\');



var resultSet = db.execute(\'SELECT * FROM USERS1\'); 
var fieldCount = resultSet.fieldCount();
var fields = [];
for(var i = 0; i < fieldCount;i++) {
    fields.push(resultSet.fieldName(i));
};

var i=0;
var results = [];
while (resultSet.isValidRow()) {
    results[i] = {};

    for (var j=0; j < fieldCount; j++) {
        results[i][fields[j]] = resultSet.fieldByName(fields[j]);
    };

    resultSet.next();
    i++;
};

// Get ALL DATA
alert(results);

// Get row 0
alert(results[0]);

// get row 0 - column Name
alert(results[0][\'NAME\']);

resultSet.close();

win.open();
    

要回复问题请先登录注册