Создать переменные из массива имен файлов JavaScript - PullRequest
1 голос
/ 16 июля 2011

У меня есть массив JavaScript с именами файлов (и их расположением в каталоге) (изначально полученный с помощью PHP для создания массива файлов PHP в каталоге, а затем преобразованный в массив JS).Я хотел бы использовать этот массив для генерации отдельных переменных с тем же именем, что и их значение.

Например, это одно из значений массива, "collada / basement / zone / basementPCroom.dae".Я хотел бы использовать это, чтобы создать переменную под названием «basementPCroom», которая содержит значение «collada / basement / zone / basementPCroom.dae».И то же самое со всеми другими значениями в массиве.

Причина, по которой я хочу это сделать, заключается в том, что изменение каждого из них по отдельности каждый раз, когда я добавляю или удаляю файлы, будет длиться вечно, и мне нужны такие именачто я могу легко найти то, что ищу позже.

Спасибо за вашу помощь!

Ниже приведен код, ведущий к этому:

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

Ответы [ 3 ]

0 голосов
/ 16 июля 2011

Если вы хотите выполнить работу на стороне сервера, вы можете сделать что-то вроде этого:

$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);
0 голосов
/ 16 июля 2011

Не пытайтесь «создавать переменные». Вместо этого поместите все в объект, или ассоциативный массив:

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

При этом используется тот факт, что вы можете использовать скобочные обозначения вместо точечных обозначений для доступа к объекту в Javascript

obj['foo']
//is the same as
obj.foo
0 голосов
/ 16 июля 2011

Один из способов сделать это следующим образом (могут быть более оптимальные способы сделать это):

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];
 }

Обновление: Объединены мои обновления, чтобы создать объект для хранения имен файловвместо того, чтобы загрязнять глобальные имена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...