【问题标题】:How to get value from unknown object property?如何从未知对象属性中获取价值?
【发布时间】:2013-10-03 06:09:40
【问题描述】:

我在从对象中提取值时遇到问题。我想检查我的 SQL 表是否有询问的行:

var checkRow = function(connection,chekedColumn,chekParam, checkVal){
    connection.query('SELECT EXISTS(SELECT '+ chekedColumn +' FROM asterisk.users where ' +chekParam+'='+checkVal+')', function (err, rows) {
        if(err) console.log('SQL suerry error')
        else {
            console.log(rows[0]); // output: { 'EXISTS(SELECT id FROM asterisk.users where name=1600)': 1 }
            return (rows[0]);
        }; 
    }); 
};

但是查询的返回值是一个对象,return(rows[0]) 只给出 [object object] 输出。如何提取此对象的值?

【问题讨论】:

  • 据我所知,在带有点 (.) 关键字的 javascript 访问对象中,不要使用此行 [0] 如果我没记错行,请尝试此操作。0
  • rows.0 不起作用:SyntaxError: Unexpected number
  • rows[0] 很好,rows.0 不是,0 不是有效的属性名称。查看有效的属性名称以通过 访问。 here.
  • 将索引从 0 更改为 1 可能是你得到了值
  • 你不能从异步函数中返回来获取值。您应该调用您的函数来处理查询内部的返回值。

标签: mysql sql node.js


【解决方案1】:

你可以使用

Object.keys(obj) 

获取对象的值。请参阅api reference 了解更多信息。

编辑:

只是详细说明一下...您将如何解决这个问题。

// get the keys of the source
var keys = Object.keys( source );
// loop through the keys
for ( var i = 0; i < keys.length; i++ ) {
  var key = keys[i];
  var value = source[key];

  //do something with value
}

【讨论】:

  • var keys=Object.keys(rows[0]);变种键=键[0]; console.log(rows[key]);// 输出:未定义
  • console.log(key);// 输出:EXISTS(SELECT id FROM asterisk.users where name=1600)
  • console.log(rows[0].key);// 输出:未定义
  • console.log(key); NodeWebKit
【解决方案2】:

输出是一个你不知道的对象。所以尝试一下:

  1. console.log("Result: %j", rows[0]);
  2. console.log(JSON.stringify(rows[0]));
  3. console.log(require('util').inspect(rows[0], false, null));

查看结构。知道密钥后,用它来访问数据。

【讨论】:

    【解决方案3】:

    感谢大家的帮助和您的想法。 Dmitry Matveev 帮助我了解如何识别对象属性(Objekt.keys())。并且感谢 user568109 提醒异步功能,所以我使用回调。
    最终代码:

    var checkRow = function(connection,chekedColumn,chekParam, checkVal,callback){
        connection.query('SELECT EXISTS(SELECT '+ chekedColumn +' FROM asterisk.users where ' +chekParam+'='+checkVal+')', function (err, rows) {
                    if(err) console.log('SQL suerry error')
                    else {
                       var keys=Object.keys(rows[0]);
                       keys.forEach(function(key) {
                           callback(rows[0][key]);
                         });
                        }; 
            }); 
    
    };
    

    为了使用这个函数,我们需要这样称呼它:

    checkRow(connection,'id','name',name,function(value){
     console.log(value)
    })
    

    【讨论】:

    • 如果您开始将答案标记为已接受以帮助您找出问题,stackoverflow 上的每个人都会喜欢您;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 2011-08-16
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多