通过javascript访问对象键值

时间:2017-05-23 10:20:53

标签: javascript php object

这是我用json格式编码的对象结构:

public static function getAllDataFromTableWithWhere($table,$fields=array(),$key=array(),$key_values=array(),$key_alias=array(),$is=true,$and=true,$orderby){
    $database = DatabaseFactory::getFactory()->getConnection();
    $table = stripslashes(strtolower($table));
    $fields = implode("`, `", $fields);
    #Debug::debugInput('FIELDS',$fields);
    if($is){
        $sql = "SELECT `$fields` FROM $table WHERE "; #`$key` = ':key_id' ORDER BY `$orderby` ASC";
        if($and){
            for($j=0;$j<count($key);$j++){
                $sql .= "`".$key[$j]. "` = ".$key_alias[$j]." AND ";
            }            
            $sql = substr($sql,0,-4);
        }else{
           for($j=0;$j<count($key);$j++){
                $sql .= "`".$key[$j]. "` = ".$key_alias[$j]." ";
            } 
            $sql = substr($sql,0,-1);
        }
    }else{
        $sql = "SELECT `$fields` FROM $table WHERE "; #`$key` LIKE `:key_id` ORDER BY `$orderby` ASC";
        if($and){
            for($j=0;$j<count($key);$j++){
                $sql .= "`".$key[$j]. "` = ".$key_alias[$j]." AND ";
            }            
            $sql = substr($sql,0,-4);
        }else{
           for($j=0;$j<count($key);$j++){
                $sql .= "`".$key[$j]. "` = ".$key_alias[$j]." ";
            } 
            $sql = substr($sql,0,-1);
        } 
    }

    $sql .= " ORDER BY $orderby";
    $data = Helpers::join2ArAliasAndArValue($key_values,$key_alias);

    #Debug::debugInput('SQL',$sql);
    #Debug::debugInput('DATA',$data);
    $query = $database->prepare($sql);
    $query->execute(array(':idkey_val' => $key_values[0]));

    return $query->fetchAll();
}

如何使用javascript访问每个值?

也许如果我想获得所有关键值,如简单的数组列表格式:

[
{"playerid":"1","score":"10"},
{"playerid":"2","score":"40"},
{"playerid":"3","score":"20"},
{"playerid":"4","score":"9"},
{"playerid":"5","score":"20"}
]

因为如果我应用playerid = ["1","2","3","4","5"] score = ["10","40","20","9","20"] ,它将返回正确获取的所有数据。但是,如果我尝试使用对象表示法来访问特定值,例如使用console.log(data)console.log(data.playerid),则返回undefined。

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

这是因为您使用的是JSON编码数据。
只需使用JSON.parse()解码即可。而不是将其作为对象访问。

答案 1 :(得分:1)

考虑到data是您在此处提供的数组,您无法访问console.log(data.playerid),因为此数组没有任何playerid属性。

您需要遍历此数组,然后逐个从对象中提取每次迭代中所需的值。

&#13;
&#13;
var playersArray = [
{"playerid":"1","score":"10"},
{"playerid":"2","score":"40"},
{"playerid":"3","score":"20"},
{"playerid":"4","score":"9"},
{"playerid":"5","score":"20"}
];

var ids = [];
var scores = [];

playersArray.forEach(function( player ){
  var playerid = player.playerid;
  var score = player.score;
  
  ids.push( playerid );
  scores.push( score );
});//forEach();

console.log( ids );
console.log( scores );
&#13;
&#13;
&#13;

答案 2 :(得分:1)

使用索引解析数据并访问数组元素: JSON.parse(data)[0].playerid

看到所有球员:

var parsed = JSON.parse(data);

for(int i = 0; i < parsed.length; i++) {
   console.log(parsed[i].playerid);
   console.log(parsed[i].score);
}

答案 3 :(得分:0)

围绕数据的方括号[]表示最外层的结构是数组,而不是对象。

数组内部有几个对象,如{}大括号所示。

为了访问内部数据,您必须首先使用数字索引从数组中选择一个项目。

从数组中选择第一个对象:

data[0] // {playerid:"1",score:"10"}

要访问该对象中的属性,可以使用对象表示法:

data[0].playerid // "1"

您还可以遍历数组中的项目以访问所有对象:

data.forEach((item)=>{
    console.log(item);
});