0

我的 javascript 中有一个对象,如下所示:

{"data":[{"t":{
                "level":"35",
                "longtitude":"121.050321666667",
                "latitude":"14.6215366666667",
                "color":"#040098"}},
         {"t":{
                "level":"31",
                "longtitude":"121.050316666667",
                "latitude":"14.621545",
                "color":"#040098"}},
         {"t":{
                "level":"29",
                "longtitude":"121.050323333333",
                "latitude":"14.62153",
                "color":"#040098"}},
//  .....

我想做的是遍历我的对象的内容,以便我能够独立地将它们推送到各自的数组中。我有一个经度、纬度、颜色和级别的数组。

所以我尝试了以下方法:

var size = 0, key;
for (key in result) {
    if (result.hasOwnProperty(key)) size++;
    alert(result.data[size]);
}

-->但这只会提醒我“[object Object]”

success: function(result){
    var size = 0, key;
    for (key in result) {
        for(var attr in key){
            alert(attr['latitude']);
        }
    }
}

-->这给了我未定义的结果[key]

我通过这些代码检查了我的对象的大小只有 1

var size = 0, key;
for (key in result) {
    if (result.hasOwnProperty(key)) size++;
}
alert(size);        

我相信只有“数据”被读取。而其他在“数据”中的则被忽略。

我已经阅读了 this , this , enter link description herethis 但它们似乎都处理了不同的对象结构。感谢您的帮助。

更新 使用console.log(),我已经确认,如果我没记错的话,只有第一个属性被获取

t
    Object { level="35", longtitude="121.0508", latitude="14.6204083333333", more...}
color       "#040098"
latitude    "14.6204083333333"
level       "35"
longtitude  "121.0508"

我试过这个

for (key in result) {
            if (result.hasOwnProperty(key)) size++;
            console.log(result.data[size]['level']);
        }

--> 但它说未定义

基于我的对象的结构,即

data:[{"t":{'others'},'others'...]

我如何阅读“数据”中的所有内容?每个“数据”都有“t”。

4

4 回答 4

1

更新:不推荐使用for...in构造来遍历数组。另一种方法是常规的 for 循环(当然每种方法都有各自的优点):

for(var i=0; i<results.data.length; i++){
    alert(results.data[i]['t']['latitude']);
    // etc...
}


请注意 JSON 的结构。另请注意,javascript foreach 循环遍历键/索引——而不是值。见演示:http: //jsfiddle.net/g76tN/

success: function(result){
    var latitudes = [];
    // and so on...

    for (var idx in result.data ) {
        if( result.data.hasOwnProperty(idx) ){
            alert( result.data[idx]['t']['latitude'] );

            // So you would do something like this:
            latitudes.push ( result.data[idx]['t']['latitude'] );
            // and so on...
        }
    }
}​

注意在数组中收集对象的属性,jQuery——$.map()或本机 js 数组映射——是一个简洁、有用的替代方案。

var latitudes = $.map( result.data, function(n){
    return n['t']['latitude'];
});
// and so on...
于 2012-07-17T01:46:42.730 回答
1

假设result是您的对象,这应该只是遍历您的data数组的问题:

for (var i = 0; i < result.data.length; ++i) {
    console.log(result.data[i].t.latitude);
    ...
}
于 2012-07-17T01:49:17.940 回答
1

做起来不难,如下图。但是你为什么要使用像你t的 's 这样有用的对象并将它们变成这样的数组呢?

var levels = [], longitudes= [], latitudes = [], colors = [];
var result = {"data":[{"t":{
            "level":"35",
            "longtitude":"121.050321666667",
            "latitude":"14.6215366666667",
            "color":"#040098"}},
     {"t":{
            "level":"31",
            "longtitude":"121.050316666667",
            "latitude":"14.621545",
            "color":"#040098"}},
     {"t":{
            "level":"29",
            "longtitude":"121.050323333333",
            "latitude":"14.62153",
            "color":"#040098"}}
]};

var data = result.data;
var i, len, t;

for (i = 0, len = data.length; i < len; i++) {
    t = data[length].t;
    levels[i] = t.level;
    longitudes[i] = t.longtitude;
    latitudes[i] = t.latitude;
    colors[i] = t.color;   
}
于 2012-07-17T01:51:50.547 回答
0

请参阅http://jsfiddle.net/VGmee/,它保留了hasOWnProperty(这很重要),以及您对“经度”的拼写错误,而不是。

var data = input.data,
    result = {level: [], longtitude: [], latitude: [], color: []};

for (var i = 0, n = data.length; i < n; i += 1) {
    var info = data[i].t;
    for (var property in info) {
        if (info.hasOwnProperty(property)) {
            result[property].push(info[property]);
        }
    }
}

console.log(result.level);
console.log(result.latitude);
console.log(result.longtitude);
console.log(result.color);

这要求结果数组实际上具有输入数组中的属性,但您可以根据需要添加错误处理。

于 2012-07-17T01:51:06.903 回答