循环遍历字符串数组只返回每个字符串中的一个字母

时间:2013-03-22 18:40:56

标签: javascript loops for-loop

我试图在javascript中测试计时功能,让它循环通过一个字符串数组并在3秒延迟后显示每个,但是当我调用该函数时,它会做一个奇怪的模式,只取第一个字母的第一个字母字符串,然后第二个字符串的第二个字母,依此类推......如果,数组中的第四个项目没有第四个字母,则打印未定义。请帮忙。 感谢

function myFunc () {
    setTimeout(function () {
        var contacts = {
            addressBook : [
            {
                'name' : 'Jane',
                'email' : 'JaneDoegmail.com'
            },
            {
                'name' : 'Meggie',
                'email' : 'meggiegmail.com'
            },
            {
                'name' : 'John',
                'email' : 'johnDoegmail.com'
            },
            {
                'name' : 'Paul',
                'email' : 'paulgmail.com'
            },
            {
                'name' : 'Bo',
                'email' : 'bogmail.com'
            }
            ]
        };
        var object = contacts.addressBook;
        var i;
        for (var i = 0; i < object.length; i++) {
            var item = object[i];
            var name = item.name;
            var email = item.email;

            document.write(name[i]);
        };

        if (i < 10) {
            myFunc();
        };
    }, 3000)
}
myFunc();

4 个答案:

答案 0 :(得分:2)

这是working jsFiddle demo

基本上,你的输出是正确的,它告诉你要做的事情,它会显示你在名字字符串索引处的字符。您应该使用(name)代替(name[i])

但是,我认为这是您可能会追求的: suggested improvement demo

基本上,它允许循环由一个计数器进行外部控制,该计数器将在调用时递增,并在显示所有联系地址后停止。

JS:

var c = document.getElementById("console");
var contacts = {
  addressBook : [
    {
        'name' : 'Jane',
        'email' : 'JaneDoegmail.com'
    },
    {
        'name' : 'Meggie',
        'email' : 'meggiegmail.com'
    },
    {
        'name' : 'John',
        'email' : 'johnDoegmail.com'
    },
    {
        'name' : 'Paul',
        'email' : 'paulgmail.com'
    },
    {
        'name' : 'Bo',
        'email' : 'bogmail.com'
    }
  ]
};
var i = 0;
(function myFunc () {
 var item = contacts.addressBook[i++];
 var name = item.name;
 var email = item.email;
 c.innerHTML += name +", " + email + "<br>";
 if (i < contacts.addressBook.length) {
  setTimeout(myFunc,3000);
 }
})()

答案 1 :(得分:1)

而不是document.write(name[i]);,请document.write(name);

答案 2 :(得分:0)

您的document.write(name[i]);

应该是

document.write(name);

由于

答案 3 :(得分:0)

检查出来:

myFunc();
function myFunc () {
setTimeout(function () {
    var contacts = {
    addressBook : [
        {
            'name' : 'Jane',
            'email' : 'JaneDoegmail.com'
        },
        {
            'name' : 'Meggie',
            'email' : 'meggiegmail.com'
        },
        {
            'name' : 'John',
            'email' : 'johnDoegmail.com'
        },
        {
            'name' : 'Paul',
            'email' : 'paulgmail.com'
        },
        {
            'name' : 'Bo',
            'email' : 'bogmail.com'
        }
    ]
};
var object = contacts.addressBook;
var i;
for (var i = 0; i < object.length; i++) {
    var item = object[i];
    var name = item.name;
    var email = item.email;

    document.write(name+" -->  ");
};

if (i < 10) {
    myFunc();
};
}, 3000)}