2016-04-01 2 views
0

Я запрашиваю данные запаса в формате JSONP из API. Ответ представляет собой массив длиной 38.повторите итерацию массива с определенным количеством итераций?

Как я могу повторить итерацию этого массива с заданным количеством итераций, то есть для 58 тотальных итераций: итерации от индекса от 0 до 37 и снова от индекса от 0 до 19?

(Практически, я хотел бы построить горизонтальную линию фондовых имен, как:. Печать всех 38 акций имен и раз и добавляя первые 20 фондовых имена раз)

Пожалуйста, смотрите мой код ниже. Благодаря!

<!DOCTYPE html> 
<html> 
<head> 
<style type='text/css'> 
#gse-wrapper {overflow: hidden;} 
.stocks {display: inline-block; width: 120px; text-align: center;} 
#gse {animation-name: slide; animation-duration: 90s; animation-iteration-count: infinite; animation-timing-function: linear; white-space: nowrap;} 
@keyframes slide {from {margin-left: 0px;} to {margin-left: -4560px;}} 
</style> 
</head> 
<body> 
<div id='gse-wrapper'><span id='gse'></span></div> 
<script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script> 
<script type='text/javascript'> 

$(document).ready(function() { 
$.getJSON("http://dev.kwayisi.org/apis/gse/live?callback=?", function (data) { // API request for stock data 
console.log(data); 
$.each(data, function (i, value) { // iterating JSON array 
$("#gse").append("<div class='stocks'>" + value.name + "</div>"); 
}); 
}); 
}); 

</script> 
</body> 
</html> 
+3

Что не так с 'for-loop'? – Rayon

ответ

0
$.getJSON("http://dev.kwayisi.org/apis/gse/live?callback=?", function (data) { 
    var data_slice = function(data, start, end) { 
     var slice = data.slice(start, end); 
     $.each(data, function (i, value) { // iterating JSON array 
      $("#gse").append("<div class='stocks'>" + value.name + "</div>"); 
     }); 
    } 
    data_slice(data, 0, 38); 
    data_slice(data, 0, 20); 
}); 
+0

ваше первое редактирование отлично работает, что нового в этом? – chiefr

+0

Я просто создал функцию 'data_slice', поэтому вам не пришлось бы дважды писать цикл $ .each'. – firasd

+0

Спасибо, что он работает отлично! – chiefr

0

использовать что-то вроде:

var i; 
    for (i = 0; i < 37; i++) { 
     // do something with myArray[i] 
    } 
    for (i = 0; i < 19; i++) { 
     // do something with myArray[i] 
    } 
+0

Если заказ прав, вы можете сделать это в одном цикле, используя modulo: 'for (i = 0; i <58; i ++) {// что-то делать с myArray [i% 38]}' –

0

Использование for-loop и указать length или условие в одном for-loop

$(document).ready(function() { 
 
    $.getJSON("http://dev.kwayisi.org/apis/gse/live?callback=?", function(data) { 
 
    for (var i = 0; i < 37; i++) { 
 
     $("#gse").append("<div class='stocks'>" + data[i].name + "</div>"); 
 
    } 
 
    $("#gse").append("<hr>"); 
 
    for (var i = 0; i < 20; i++) { 
 
     $("#gse").append("<div class='stocks'>" + data[i].name + "</div>"); 
 
    } 
 
    }); 
 
});
#gse-wrapper { 
 
    overflow: hidden; 
 
} 
 
.stocks { 
 
    display: inline-block; 
 
    width: 120px; 
 
    text-align: center; 
 
} 
 
#gse { 
 
    animation-name: slide; 
 
    animation-duration: 90s; 
 
    animation-iteration-count: infinite; 
 
    animation-timing-function: linear; 
 
    white-space: nowrap; 
 
} 
 
@keyframes slide { 
 
    from { 
 
    margin-left: 0px; 
 
    } 
 
    to { 
 
    margin-left: -4560px; 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<div id='gse-wrapper'><span id='gse'></span> 
 
</div>

0

Попробуйте цикл for с внешней переменной для ваших максимальных желаемых итераций и еще одну переменную, чтобы отслеживать, сколько раз вы повторяли. Объедините это с проверками внутри цикла for, чтобы убедиться, что вы закончили первый цикл, чтобы начать заново, и закончите, когда вы нажмете свой счетчик максимумов. Например;

var max = 58 // Your desired looping amount 
var current = 0; 

for(var y = 0; y < max; y++){ 
    // Logic Here - data[y]; 

    if(y >= data.length){ 
    y = 0; 
    } 

    if(current == max){break;} 

    current++; 
} 
+0

Спасибо. Однако я не мог заставить ваше решение работать. консоль сообщает мне, что x не определен – chiefr

+0

Неплохо, это была ошибка при создании решения. Измените 'x' за' max' – Lewis

0

Вы должны использовать цикл for в javascript и modulo operator%. Это решение находится в javascript с массивом javascript. Чтобы преобразовать массив JSON в JavaScript, используйте:

var array = JSON.parse(jsonArray); 

Если л длина вашего массива и п предпочтительное число итераций, вы могли бы использовать что-то вроде этого:

for (x = 0; x < n; x++){ 
    array[x%l] // this is the element you can do stuff with 
} 
+0

Но '$ .getJSON' ...? – Rayon

Смежные вопросы