如何在多个对象内的数组中的数组中打印值

时间:2015-02-19 10:18:42

标签: javascript

var data = [
    {
        infoType: [
            [1],
            [2],
            [3],
        ]
    },
    {
        infoType: [
            [4],
            [5],
            [6],
        ]   
    },
    {
        infoType: [
            [7],
            [7],
            [8],
        ]   
    },
    {
        infoType: [
            [9],
            [10],
            [11],
        ]   
    }

]

伙计们,我有这些数据里面有几个对象,在这个对象里面我有一个字段'infoType',我正在尝试打印所有值,但我没有得到。

我该怎么做?

我是这样想的:

for(var i = 0; i < data.length; i++) {
    data[i].infoType.forEach(function(item) {
      console.log(item);
    })
}


for(var i = 0; i < data.length; i++) {
 for(var j = 0; i < data[i].infoType.length; i++) {
    console.log(data[i].infoType[j]);
 }
}

我不能使用jquery。

4 个答案:

答案 0 :(得分:1)

我在数组中的数组之前完成了这个解决方案。但是在谷歌地图标记的c#侧

str.Append("<script type='text/javascript'>");
    str.Append("var _arrSitesLatLang = new Array();");

    StationsDataDB objSitesDB = new StationsDataDB();
    DataTable dt = objSitesDB.GetBySitesIdAndDates(Request.QueryString["SId"], Request.QueryString["date"], Request.QueryString["Q"]);
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        str.Append("var arr = new Array();");
        str.Append("arr.push('" + dt.Rows[i]["Station"].ToString() + "');");
        string[] latlang = null;
        if (!string.IsNullOrEmpty(dt.Rows[i]["LatLang"].ToString()))
        {
            latlang = dt.Rows[i]["LatLang"].ToString().Trim().Split(',');
            str.Append("arr.push(" + latlang[0] + ");");
            str.Append("arr.push(" + latlang[1] + ");");
        }
        str.Append("_arrSitesLatLang.push(arr);");
    }

并在客户端

var markers = _arrSitesLatLang;
for (i = 0; i < markers.length; i++) {
            var position = new google.maps.LatLng(markers[i][1], markers[i][2]);
            bounds.extend(position);
            marker = new google.maps.Marker({
                position: position,
                map: map,
                title: markers[i][0]
            });

            // Allow each marker to have an info window    
            google.maps.event.addListener(marker, 'click', (function (marker, i) {
                return function () {
                    infoWindow.setContent(infoWindowContent[i][0]);
                    infoWindow.open(map, marker);
                }
            })(marker, i));

            // Automatically center the map fitting all markers on the screen
            map.fitBounds(bounds);
        }

我的数组返回数据,例如_arrSitesLatLang = [[1,1],[1,2]]例如。

此类工作还有另一种解决方案

如果使用数组main并在此数组中推送对象及其属性。喜欢

$.grep function 

答案 1 :(得分:0)

您可以使用此代码段来展平您的结构:

function getValues(root, vals) {
    if (root instanceof Array){
        for (var i = 0; i < root.length;i++){
            if (typeof root[i] == 'object')
                getValues(root[i], vals);
            else
                vals.push(root[i]);
        }
        return;
    }
    for (var key in root){
        getValues(root[key], vals);
    }
}


var data = [
    {
        infoType: [
            [1],
            [2],
            [3],
        ]
    },
    {
        infoType: [
            [4],
            [5],
            [6],
        ]   
    },
    {
        infoType: [
            [7],
            [7],
            [8],
        ]   
    },
    {
        infoType: [
            [9],
            [10],
            [11],
        ]   
    }

];
var vals = [];
getValues(data, vals);
console.log(vals);

在结构平坦后,您只需将vals变量作为一个简单的数组:

for (var i = 0; i< vals.length; i++){
    console.log(vals[i]);
}

答案 2 :(得分:0)

要打印上述结构中的所有值,并且假设没有引入其他结构,您可以执行以下操作:

Fiddle

for (var i = 0; i < data.length; i++) {
    var obj = data[i].infoType;
    for (var j =0; j < obj.length; j++) {
        console.log(obj[j][0]);
    }
}

答案 3 :(得分:0)

您需要执行item[0],因为item也是长度为1数组

for(var i = 0; i < data.length; i++) {
    data[i].infoType.forEach(function(item) {
      console.log(item[0]);
    })
}

工作Fiddle