变量作为 JavaScript 数组名称

Variables as JavaScript Array Names

本文关键字:数组 JavaScript 变量      更新时间:2023-09-26

>问题:尝试使用"动态"变量访问 JSON/JavaScript 数组.

# 示例 #

而不是。。。array1[ ] array2[ ] 甚至 array9000[ ]

像...var my_array = 'array' + 'some generated number' ;

然后只是...my_array[ ] my_array[一些数字]

但这不起作用... (现在在底部解决(



我有一些PHP正在读取一些目录以及创建JSON数组的内容。JSON 数组按顺序命名,它们存储映像目录...

JSON 数组名称示例:图像 0、图像 1、图像 2 等...

    <?php
        $dir = opendir(getcwd());
        $num=0;
        while($folder = readdir($dir)) {
            if($folder !== '.' && $folder !== '..'){
                if (is_dir($folder)) {
                    echo '<script type="text/javascript">';
                    $folderCHILD = opendir($folder);
                    while($image = readdir($folderCHILD)) {
                        if($image !== '.' && $image !== '..'){
                            $images[]=$folder."/".$image;
                        }
                    }
                    closedir($folderCHILD);
                    echo 'images'.$num.' ='.json_encode($images);
                    unset($images);
                    echo '</script>';
                    $num++;
                }
            }
        }
        closedir($dir);
    ?>


然后我有一些Javascript/Jquery,它"尝试"通过点击函数访问这些按顺序命名的JSON数组。该函数将使用存储在 JSON 数组中的图像目录创建映像。

<script type="text/javascript">
    $(document).ready(function() {
        $('something').click(function() {
            var indexCURRENT = $(this).index();
            var ARRAY = 'images'+indexCURRENT;
            $(document.createElement("img")).attr({ src: ARRAY[some number]}).addClass("image").appendTo('body');
        });
    });
</script>
^

上面的Javascipt/Jquery不起作用^


但是感谢dev-null-dweller,这段代码确实有效...

<script type="text/javascript">
    $(document).ready(function() {
        $('#gallery_link p').click(function() {
            var indexCURRENT = $(this).index();
            var ARRAY = 'images'+indexCURRENT;
            $(document.createElement("img")).attr({ src: window[ARRAY][some number]}).addClass("image").appendTo('body');
        });
    });
</script>

区别?

.attr({ src: window[ARRAY][some number]})
我很

确定你不能在JS中做到这一点。不能将变量内容用作变量名称。这在 php 中是可行的,你可以这样做

$varname = 'x';
$$varname = "something";
print $x; //Prints "something"

但不是在JavaScript中。只需使用多维数组或哈希即可执行此操作。

快速回答:您的数值变量应该可以在window对象中访问,像数组 (window['images1'] ( 一样访问,因此只需更改

{ src: ARRAY[1]}

{ src: window[ARRAY][1] }

应该让它工作。

正确答案:使用数组/对象,很简单:

<script>
echo '<script type="text/javascript">';
echo 'images = [];';
$folderCHILD = opendir($folder);
while($image = readdir($folderCHILD)) {
    if($image !== '.' && $image !== '..' && $folder !=='resource'){
        $images[]=$folder."/".$image;
    }
}
closedir($folderCHILD);
echo 'images.push('.json_encode($images).');';
echo '</script>';

然后:

{ src: images[indexCUR][1] }