push()方法将元素添加进数组却无法提取,原因何在?

发布于 2022-09-12 22:51:18 字数 1882 浏览 13 评论 0

需求:遍历一个文件夹下的html文件,然后生成页面标题等数组。
问题:push进各数组的元素在console里可以看到,且数组长度正常,但是调用的时候显示为空。

// Add window load listener
window.addEventListener('load', showIndex);

function showIndex() {
    
    const files = ['test', 'demo'];

    for(let a = 0; a < 1; a++){
        
        let partNames = [];
        let sameParts = [];
        let pageUrl = [];
        let pageNames = [];
        
        for(let i = 0; i < 4; i++){
            // Open file
            let indexs = new XMLHttpRequest();
            
            indexs.open('GET', `../indexTest/${files[a]}${i}.html`,true);
            
            indexs.onload = function() {
                
                // Get part names and times
                let partName = getPageNames(indexs, 'h2');
                
                if(! partNames.includes(partName)){
                    partNames.push(partName);
                    sameParts.push(1);
                } else {
                    sameParts[sameParts.length - 1]++;
                }

                // Get page relative path
                pageUrl.push(`${files[a]}${i}.html`);

                // Get page names
                pageNames.push(getPageNames(indexs, 'h3'));
                
            };
            
            indexs.send();
            
        }
        
        // test
        console.log(partNames, sameParts, pageUrl, pageNames, files);
        console.log(partNames[0]);
        console.log('partNames.length: ' + partNames.length);
        console.log(Object.getOwnPropertyNames(pageUrl));

    }
}

function getPageNames(obj, hx) {

    let start = obj.responseText.indexOf(`<${hx}>`) + 4;
    let end = obj.responseText.indexOf(`</${hx}>`);
    
    return obj.responseText.substring(start, end);
}

console结果如下:

image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

洛阳烟雨空心柳 2022-09-19 22:51:18

for循环里是个异步操作吧,console写到indexs.onload里试试,我觉得用递归好点

const loop = (i) => {
    if(i< 5) {
        // 模拟异步方法
        setTimeout(() => {
            i++;
            loop(i);
        }, 500);
    }
}
loop(0);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文