迭代数组而不是所有项目都显示出来

时间:2014-08-19 22:03:20

标签: javascript jquery

请参阅此处的示例 - http://jsfiddle.net/jayblanchard/b2y1tagk/

使用以下代码我会认为我会将所有三个元素附加到结果中,但我不这样做。我明白了:

primary - bar secondary - glorp

var elements = [{
        type: 'secondary',
        name: 'foo'
    }, {
        type: 'primary',
        name: "bar"
    }, {
        type: 'secondary',
        name: "glorp"
    }];

    var elementItem;
    $(elements).each(function () {
        if (this.type == 'primary') {
            elementItem = this.type + ' - ' + this.name + '<br />';
        } else {
            elementItem += this.type + ' - ' + this.name + '<br />';
        }
    });
$('#results').append(elementItem);

所以我认为我应该将+=运算符添加到if条件的第一部分,但是当我这样做时,我得到了这个:

undefinedsecondary - foo primary - bar secondary - glorp

生成它们时它们的顺序无关紧要,它们只有在完成时才必须存在。我确信我错过了一些明显的东西,有人可以告诉我那是什么吗?

2 个答案:

答案 0 :(得分:3)

elementItem = this.type + ' - ' + this.name + '<br />';

需要:

elementItem = this.type + ' - ' + this.name + '<br />' + elementItem;

否则,如果primary不是第一项,则覆盖它。

使用var elementItem = "";初始化它,因此它不会将elementItem类型转换为字符串“undefined”

http://jsfiddle.net/b2y1tagk/3/

答案 1 :(得分:2)

当您到达主要类型时,您正在使用elementItem重置=变量。尝试附加列表中的每个项目。按var elementItem=''初始化elementItem。

    var elements = [{
        type: 'secondary',
        name: 'foo'
    }, {
        type: 'primary',
        name: "bar"
    }, {
        type: 'secondary',
        name: "glorp"
    }];

    var elementItem = '';
    $(elements).each(function () {
        if (this.type == 'primary') {
            elementItem += this.type + ' - ' + this.name + '<br />';
        } else {
            elementItem += this.type + ' - ' + this.name + '<br />';
        }
    });
$('#results').append(elementItem);