Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们如何在JavaScript中的嵌套数组中获得递归可以';你不能去吗?_Javascript_Arrays_Reactjs_Google Chrome Devtools_Nested Lists - Fatal编程技术网

我们如何在JavaScript中的嵌套数组中获得递归可以';你不能去吗?

我们如何在JavaScript中的嵌套数组中获得递归可以';你不能去吗?,javascript,arrays,reactjs,google-chrome-devtools,nested-lists,Javascript,Arrays,Reactjs,Google Chrome Devtools,Nested Lists,所以我似乎已经找到了一个我认为很容易解决的终极问题,但我个人在所有论坛上研究了3小时后放弃了XD 所以我访问了一个包含webplayer.js文件的在线网站。在这个包中,我们有一个非常大的嵌套数组,它存储了应用程序的所有变量,在超过递归限制之前,任何递归函数都无法进入该数组 我想要在这个js文件中访问一个变量的原因是能够用我自己的js文件操作一个变量(尝试创建一个插件/tampermonkey脚本,尽管XD从未如此)。因此,我希望在chrome控制台中的大型阵列中找到这个特定的键,以便能够对其进

所以我似乎已经找到了一个我认为很容易解决的终极问题,但我个人在所有论坛上研究了3小时后放弃了XD

所以我访问了一个包含webplayer.js文件的在线网站。在这个包中,我们有一个非常大的嵌套数组,它存储了应用程序的所有变量,在超过递归限制之前,任何递归函数都无法进入该数组

我想要在这个js文件中访问一个变量的原因是能够用我自己的js文件操作一个变量(尝试创建一个插件/tampermonkey脚本,尽管XD从未如此)。因此,我希望在chrome控制台中的大型阵列中找到这个特定的键,以便能够对其进行编辑

如果我想在这里操作一个位于这个大数组中的变量,例如:
(“视频自动播放”:true)
,我现在在chrome中能够做到这一点的唯一方法是:

  • 在webplayer.js设置
    var autoPlay=Key to(“video autoPlay”:true)
  • 断点到达时手动编辑变量
  • 这样做的原因是,当我点击断点时,我进入了与该变量相同的范围,我现在可以从chrome控制台键入
    autoPlay=False

    但要使其自动化,我不能依赖于设置断点,因此我需要能够在非常大的数组中访问此密钥

    是否有一个javascript函数可以在不进行递归搜索的情况下获取该键,可能是通过哈希id(然后使用某种查找表?)或类似的东西,当我点击
    var autoPlay=…
    的断点时,我可以检查这些函数,并尝试找到一种方法,在im超出范围后再次唯一地访问该变量。(我确实尝试将其添加到监视列表中,但一旦断点继续并超出范围,它就会被删除)

    总而言之,我相信在构建生产文件时,编码的React变量会变成一个嵌套变量数组。因此,如果React能够立即访问嵌套数组中的这些变量,这让我相信一定有某种查找表,我们应该能够说类似于
    var unreachableKey=GetKeyFromNestedArray(“视频自动播放”)??

    事先非常感谢!:D

    编辑附加的代码段:

    这是阵列结构的一小部分

    这是我可以找到变量并简单放置断点的地方之一。


    ps.原始文件说
    r=t.videoAutoPlay
    我将其更改为
    r=t.video-autoplay
    以匹配所有内容:D

    您可以使用以下语法访问对象矩阵的元素:

    let array = {"arr": {"nested1":{"nested2":{"nested3": "Hello!"}}}};
    let deep = array["arr"]["nested1"]["nested2"]["nested3"];
    console.log(deep);
    

    我已经成功地找到了这个嵌套的、讨厌的键(不仅有字典,还有混合字典和列表)!如果将来需要的话,我可以将代码分享给任何人。我可以说,这是一个递归函数,它成功地得到了它,我以前无法得到它的原因是,在stackoverflow发布的这类函数的大多数代码也迭代了每个字符串中的每个字符,因为
    Object.keys()
    函数还将字符串拆分为单独的字符,这使得递归深度达到了惊人的深度

    下面是一个改进的代码:

    function findByKey(obj, key) {
        if(obj==null || obj==undefined ){
            return;
        }
        if(obj.constructor === Object || obj.constructor === Array){
            var keys = Object.keys(obj);
            for(i in keys){
                var i = keys[i];
                if(key == i){
                    return obj; 
                }else{
                    var test = findByKey(obj[i], key);
                    if(test != undefined){
                        return test;
                    }
                }
            }
        }else if(obj == key){
            return key;
        }
        return;
    
    }
    

    非常感谢用户wOxxOm指出,这样的函数应该能够处理递归深度,因此我可以设法找出问题。

    您在描述问题方面做得很好,但我们也需要查看代码。@IanKemp哦,对不起,当然会在一秒钟内上传!:如果一个小的库是允许的,像(免责声明:my)这样的东西就可以了。请不要上传代码的图片。请看@Phil哦抱歉,是不是智能感知着色有助于更好地形象化:(难道没有其他方法吗?我相信我们有400种类似嵌套的古怪。XDYikes!我不知道,抱歉。