Jquery无法访问循环外的数组

时间:2017-09-17 10:21:22

标签: javascript jquery arrays loops

我从以下代码中得到一个奇怪的行为。以下代码来自ajax成功,console.log(positions);内部循环工作正常,但外面它没有给我任何东西。

success: function (data) {
    var positions = [];

    $.each(data, function (index, value) {
        $.each(value, function (index1, value1) {
            positions.push({
                lat: value1.rider_location.lat,
                lng: value1.rider_location.lng,
            });
            //This works fine | I can get the results. But after commenting out the below line then the last `console.log(positions)` doesn't shows anything.
             console.log(positions);
        });
    });
    console.log(positions);
}

来自Ajax的data为我提供了以下结果,然后我遍历它并将值分配给positions

enter image description here

Indside循环给出了以下结果:

enter image description here

在循环console.log(positions)之外没有例外,也没有结果。

2 个答案:

答案 0 :(得分:1)

您的数据不是数组而是对象。在它上面使用$.each()意味着它将循环遍历它的所有属性,这就是它无法按预期工作的原因。您可能想要遍历data.riders。也没有其他数组可以循环,所以第二个循环不应该在那里:



var data = {
    riders: [{
            rider_location: {
                lat: 2,
                lng: 3
            }
        },
        {
            rider_location: {
                lat: 4,
                lng: 5
            }
        }
    ]
};

var positions = [];

$.each(data.riders, function(index, value) {
    positions.push({
        lat: value.rider_location.lat,
        lng: value.rider_location.lng,
    });
});

console.log(positions);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

鉴于返回的数据格式,我会尝试:

好像你试图用第二个循环遍历rider_location,但是rider_location是一个对象,所以你只能访问它的属性。

success: function (data) {
    var positions = [];

    $.each(data.riders, function (index, value) {
           positions.push({
                lat: value.rider_location.lat,
                lng: value.rider_location.lng,
            });
    });
    console.log(positions);
}

PS随时回复我:)