数组中的字符串仅在尝试获取单个值时返回未定义?

Posted

技术标签:

【中文标题】数组中的字符串仅在尝试获取单个值时返回未定义?【英文标题】:String in array returning undefined only when trying to get single value? 【发布时间】:2018-03-29 05:57:47 【问题描述】:

soo 在表上执行 console.log 是可行的,但是当我尝试获取单个值时,它会返回 undefined 像这样 [undefined: "text"] 并且由于某种原因,第二个 for 循环变量始终为 5。我不知道如何重现这个。 groupCache 和shoutCache 是空数组

//userid, groupCache, shoutCache defined above

function arraysEqual(arr1, arr2) 
    if(arr1.length !== arr2.length)
        return false;
    for(i = arr1.length; i--;) 
        if(!arr2.indexOf(arr1[i]))
            return false;
        

    return true;


setInterval(function() 
    $.getJSON("https://api.roblox.com/users/" + userid + "/groups").done(function (data) 
        console.log(data)
        for (i = 0; i < data.length; i++) 
            if (!arraysEqual(data, groupCache)) 
                groupCache.push(data[i].Id.toString())
            
        
        for (var v = 0; v < groupCache.length; v++) 
            $.get("https://web.roblox.com/My/Groups.aspx?gid=" + groupCache[v]).done(function (dataA) 
                var elems = $(dataA);
                var finda = $('#ctl00_cphRoblox_GroupStatusPane_StatusTextField', elems);
                shoutCache[groupCache[v]] = finda.text() // does not work
                console.log(groupCache[v] + " :GC")
                console.log(shoutCache)
            )
        
    )
, 10000);

Manifest.json


    "manifest_version": 2,
    "background": 
        "scripts": ["/libs/jquery-3.2.1.min.js", "/scripts/Notify.js"]
    ,
    "name": "Extension",
    "browser_action": 
        "default_title": "Extension"
    , 
    "web_accessible_resources": [
        "options.html",
        "img/*.png",
        "JSON/*.json"
    ],
    "options_ui": 
        "page": "options.html",
        "chrome_style": true
    ,
    "permissions": ["storage", "background"],
    "short_name": "Extension",
    "version": "0.1.0"

【问题讨论】:

for 循环中的异步调用? 是的...... ? ...... 请edit 成为主题的问题:包括一个minimal reproducible example 重复问题。对于 Chrome 扩展程序或 Firefox WebExtensions,您几乎总是需要包含您的 manifest.json 和一些背景、内容和/或弹出脚本/HTML,通常是网页 HTML/脚本。寻求调试帮助的问题(“为什么我的代码没有按我想要的方式工作?”)必须包括:(1)期望的行为,(2)特定的问题或错误以及(3)重现它所需的最短代码在问题本身中。另请参阅:What topics can I ask about here? 和 How to Ask。 看起来像任何“js异步循环”问题的副本。 【参考方案1】:

单项问题提示您遇到了类似于 Out of Bounds 错误的情况。我看到你的 for 循环从字符串的长度开始(记住字符串的长度总是比字符串的最后一个索引大一),所以你应该进行以下更改:

function arraysEqual(arr1, arr2) 
    if(arr1.length !== arr2.length)
        return false;
    for(var i = arr1.length - 1; i--;) 
        if(!arr2.indexOf(arr1[i]))
            return false;
        

    return true;

【讨论】:

这不是我的问题 我的错。我想我只是在想,如果 arraysEqual 函数不起作用,那么将数据推送到 groupCache 的条件将不满足,这将导致数组保持为空。对不起,但这是我唯一的想法。祝你好运!

以上是关于数组中的字符串仅在尝试获取单个值时返回未定义?的主要内容,如果未能解决你的问题,请参考以下文章

VueJS:仅在计算内部未定义变量

通过 AJAX 访问从 Django Rest Framework 返回的数组中的项目时获取“未定义”

未捕获的引用错误,未定义通知

在尝试为 neo4j db 仅返回单个对象而不是 graphql 中的数组时获取 null

Firefox 4 中的 JQuery 未定义和 $ 未定义错误 [关闭]

Cypress - 如何获取单个测试的数据,如标题、状态等