【问题标题】:Create variables from a JavaScript array of filenames从文件名的 JavaScript 数组创建变量
【发布时间】:2011-07-16 16:38:36
【问题描述】:

我有一个 JavaScript 数组,其中包含文件名(及其目录位置)(最初是使用 PHP 在目录中创建一个 PHP 文件数组,然后转换为 JS 数组)。我想使用这个数组来生成与它们的值同名的单个变量。

例如,这是数组值之一,“collada/basement/zones/basementPCroom.dae”。我想用它来创建一个名为“basementPCroom”的变量,它的值是“collada/basement/zones/basementPCroom.dae”。与数组中的所有其他值相同。

我想这样做的原因是因为每次添加或删除文件时单独更改每个文件都需要很长时间,而且我需要它们具有这些特定名称,以便以后可以轻松找到我要查找的内容。

感谢您的帮助!

以下是导致此的代码:

<?php
$zones = glob('collada/first/zones/*dae');
?>
var zones = <?php echo json_encode($zones) ?>;

【问题讨论】:

    标签: javascript arrays variables


    【解决方案1】:

    一种方法是这样做(可能有更优化的方法):

    var filenames = filenames || {};
    
    for(var i = 0, len = array.length; i < len; i++) {
       filenames[getName(array[i])] = array[i];
    }
    
    function getName(str) {
       var parts = str.split('/');
       return parts[parts.length-1].split('.')[0];
     }
    

    更新:合并我的更新以创建一个对象来保存字段名,而不是污染全局命名空间。

    【讨论】:

    • 污染全局命名空间完全不是解决办法。
    • 同意 Shef,即使 OP 似乎要求全局变量。 OP还希望剥离路径和扩展名。尝试构建一个新对象,其属性(键)和基本文件名,并检查错误。 :-)
    • @Shef @Ray Toal @Mrchief 我已经更新了问题,以便您更好地了解我在说什么。
    • @Mrchief 谢谢你。我正在尝试合并它。但是我的 JavaScript 技能很差,我是新手。你能解释一下发生了什么,并告诉我如何将它与我上面显示的内容结合起来,也许可以打印出变量的名称和值,这样我就知道它正在工作。对不起,我知道这要求很多,但我真的很感激。谢谢!
    • 您可以在任何您想要的function 中运行for 循环。完成后,您可以像这样访问单个文件名:filenames.basementPCroom。执行alert(filenames.basementPCroom); 以查看其价值。如果您使用的是 FF,您还可以使用 console.log(filenames.basementPCroom) 将其值记录到调试控制台并进行验证。
    【解决方案2】:

    如果你想做服务器端的工作,你可以这样做:

    $zoneArray = glob('whatever');
    
    //grab keys
    $grabFileName = function($val){
       return substring($val, strrchar($val, '/'), strchar($val, '.'));
    }
    $zoneKeys = array_map($grabFileName, $zoneArray);
    
    //apply keys to array
    $zoneHash = array_combine($zoneKeys, $zoneArray);
    
    //associative arrays become objects
    json_encode($zoneHash);
    

    【讨论】:

      【解决方案3】:

      不要尝试“创建变量”。而是将所有内容都放在一个对象中,也就是关联数组:

      var paths = {};
      paths[a_file_name] = its_directory;
      

      这使用了这样一个事实,即您可以使用括号表示法而不是点表示法来访问 Javascript 中的对象

      obj['foo']
      //is the same as
      obj.foo
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-09
        • 2011-11-22
        • 2012-08-02
        • 1970-01-01
        • 1970-01-01
        • 2020-07-18
        • 1970-01-01
        相关资源
        最近更新 更多