-1

我对 JavaScript 世界还很陌生,我不完全确定如何像使用数组一样使用对象(通过索引而不是特定名称从对象内部访问信息)。

我想根据对象的索引检索对象内容的值,类似于数组的索引。我在下面的代码中对此进行了说明:

function pieChart(daten, width, height, div)
{
    var data = new google.visualization.DataTable();
    
    data.addColumn('string');
    data.addColumn('number');
    //returns: [Object, Object, Object, Object]
    console.log(daten);

    for(item in daten)
    {    
         console.log(daten[item]);
         //The following 4 lines are the output of the console log
         //Object {crimes: "300", location: "Cardiff"}
         //Object {crimes: "900", location: "London"}
         //Object {crimes: "500", location: "Manchester"}
         //Object {crimes: "400", location: "Dublin"}             
        
         //here in lies the problem...
         data.addRow([daten[item].location, parseInt(daten[item].crimes)]);
         //the output would be: ["Dublin", 400] etc...
    }

    var chart = new google.visualization.pieChart(document.getElementById(div));
    chart.draw(data, {"width": width, "height": height});
}

本质上,我希望能够做到data.addRow([daten[item][0], daten[item[1]]),因为我在运行时不知道位置和犯罪。

编辑:

我应该注意,我使用的是 Google Visualisations API(如上图所示),它将一个数组作为data.addRow(). 因此,一种可能的解决方案是将对象转换为具有上述指定要求的数组,使得输出为:["Dublin", 400]["London", 900]["Manchester", 500]["Cardiff", 300]. 但是,我不知道该怎么做。

4

3 回答 3

1

您不能以这种方式访问​​对象属性。您必须知道索引的名称是什么;这基本上就是他们的工作方式。我想你可以通过迭代对象的属性来做你想做的事。这样你就不需要事先知道属性的名称是什么:

var rowData = [];

for(var property in daten[item]) {
    var value = daten[item][property];

    //Since you want to convert some strings to integers, this
    //regex checks to see if the value is an integer or not
    if(/^-?\d+$/.test(value)) {
        rowData.push(parseInt(value, 10))   
    } else {
        rowData.push(value);
    }
}

data.addRow(rowData);

注意:请记住,这并不能为您提供可预测的daten[item].

于 2013-04-26T15:38:45.143 回答
0

您可以通过这种方式访问​​该值daten[item][location]

于 2013-04-26T15:45:28.437 回答
0

您应该通过它们的键访问对象的值:

data.addRow(item.location, item.crimes);
于 2013-04-26T15:37:49.030 回答