jQuery .each()乘以“我”?

时间:2015-11-12 18:20:27

标签: javascript jquery arrays loops each

我正在尝试为学校项目制作一种新闻专线,但我在jQuery的.each()功能方面遇到了一些问题。我正试图找到一种方法来跳过循环中的每个第二个数组元素。

基本上我有来自纽约时报API的数据并得到了标题和摘要,并将它们推送到一个数组中,然后我每隔一段时间循环和动画。

我的问题是,我似乎无法找到一种方法来获取Title + Abstract (Index[0]+[1]),而无需循环再次转移到index[1]。现在我知道在Javascript中你可以简单地使用for (i=0; i < array.length; i+2),因此跳过每个第二个数组元素,但我没有任何运气合并它。有什么建议? :)

$(document).ready(function() {
var newsWire = [];
    function loadNewswire() {
        return $.getJSON('http://api.nytimes.com/svc/news/v3/content/all/all.json',
        {'api-key': 'XXXXXXXXXXXXXXXXXXX'},
        function(data) {
            console.log(data)
            var newsWireTemp = [];
            for (var i = 0; i < data.results.length; i++) {
                var breakingNews = data.results[i];
                var breakingTitle = breakingNews.title.toUpperCase();
                var breakingAbstract = breakingNews.abstract;
                newsWireTemp.push(breakingTitle);
                newsWireTemp.push(breakingAbstract);
            }
            newsWire = newsWireTemp;
        });
    }
    loadNewswire().done(function () {
        var items = newsWire;
        $text = $('#newswiretxt span'),
        delay = 10; //seconds
        function loop (delay) {
            $.each(items, function (i, elm){
                $text.delay(delay*1E3).fadeOut();
                $text.queue(function(){
                    $text.html(items[i]+ ": " +items[i+1]);
                    $text.dequeue();
                });
                $text.fadeIn();
                $text.queue(function(){
                    if (i == items.length -1) {
                        loop(delay);   
                    }
                $text.dequeue();
                });
            });
        }
        console.log(items.length);
        loop(delay);
        });
});

6 个答案:

答案 0 :(得分:0)

查看this SO thread是否可以帮助您。

根据我的理解,您希望跳过其他所有迭代,因此在适当的时候检查 i 的奇偶校验是否有效。

懒惰:

<td>

让我知道它是否有帮助。

答案 1 :(得分:0)

基本上,只需将所需的文本连接到数组中以用于加载函数。然后,当您迭代时,您可以简单地按原样编写内容,而不会弄乱迭代。

$(document).ready(function() {
   var newsWire = [];
function loadNewswire() {
    return $.getJSON('http://api.nytimes.com/svc/news/v3/content/all/all.json',
    {'api-key': 'XXXXXXXXXXXXXXXXXXX'},
    function(data) {
        console.log(data)
        var newsWireTemp = [];
        for (var i = 0; i < data.results.length; i++) {
            var breakingNews = data.results[i];
            var breakingTitle = breakingNews.title.toUpperCase();
            var breakingAbstract = breakingNews.abstract;
            newsWireTemp.push(breakingTitle + ': ' + breakingAbstract);
        }
        newsWire = newsWireTemp;
    });
}
loadNewswire().done(function () {
    var items = newsWire;
    $text = $('#newswiretxt span'),
    delay = 10; //seconds
    function loop (delay) {
        $.each(items, function (i, elm){
            $text.delay(delay*1E3).fadeOut();
            $text.queue(function(){
                $text.html(items[i]);
                $text.dequeue();
            });
            $text.fadeIn();
            $text.queue(function(){
                if (i == items.length -1) {
                    loop(delay);   
                }
            $text.dequeue();
            });
        });
    }
    console.log(items.length);
    loop(delay);
    });
 });

答案 2 :(得分:0)

使用一个对象var bn={};,而不是使用两个数组索引,添加两个条目bn.breakingTitle=breakingNews.title.toUpperCase();bn.breakingAbstract=breakingNews.abstract;,然后按newsWireTemp.push(bn);一个,以便newsWire中的每个条目1}}更像newsWire[i].breakingTitlenewsWire[i].breakingAbstract

答案 3 :(得分:0)

一种方法:

小提琴:http://jsfiddle.net/q18dv4wr/

HTML:

<div id="test1">odds:</div>
<div id="test2">evens:</div>

JS:

var someData = [0,1,2,3,4,5,6,7,8,9,10];
var div1 = $('#test1');
var div2 = $('#test2');
$.each(someData,
    function (index, value) {
        if (index % 2 == 0) {
            return;
        }
        else {
            div1.append(' ' + value);
        }
    }
);
$.each(someData,
    function (index, value) {
        if (index % 2 != 0) {
            return;
        }
        else {
            div2.append(' ' + value);
        }
    }
);
编辑:似乎我发布的时间太晚了。其他人已经提出了同样的想法。 =]哦,好吧。

答案 4 :(得分:0)

你可以这样做: $text.html(items[i]+ ": " +items[(i+=1)]); 但就个人而言,我会将breakingNews对象推送到数组中,而不是为每个属性设置不同的索引:

$(document).ready(function() {
var newsWire = [];
    function loadNewswire() {
        return $.getJSON('http://api.nytimes.com/svc/news/v3/content/all/all.json',
        {'api-key': 'XXXXXXXXXXXXXXXXXXX'},
        function(data) {
            console.log(data)
            var newsWireTemp = [];
            for (var i = 0; i < data.results.length; i++) {
                newsWireTemp.push(data.results[i]);
            }
            newsWire = newsWireTemp;
        });
    }
    loadNewswire().done(function () {
        var items = newsWire;
        $text = $('#newswiretxt span'),
        delay = 10; //seconds
        function loop (delay) {
            $.each(items, function (i, elm){
                $text.delay(delay*1E3).fadeOut();
                $text.queue(function(){
                    $text.html(items[i].title.toUpperCase()+ ": " +items[i].abstract);
                    $text.dequeue();
                });
                $text.fadeIn();
                $text.queue(function(){
                    if (i == items.length -1) {
                        loop(delay);   
                    }
                $text.dequeue();
                });
            });
        }
        console.log(items.length);
        loop(delay);
        });
});

答案 5 :(得分:0)

尝试使用.append(),在附加items[i + 1]之前检查是否已定义items[i + 1],否则返回空字符串

$text.append(items[i] + (!!items[i+1] ?  ":" + items[i+1] + " ": ""))

&#13;
&#13;
var items = "abcdefg".split("")

$.each(items, function(i, item) {
  $("body").append(items[i] + (!!items[i+1] ?  ":" + items[i+1] + " ": ""))
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
&#13;
&#13;