2015-11-25 1 views
-2

У меня есть некоторые JavaScript:Как мне использовать функцию карты для создания пользовательского хэша из массива в Perl?

var $things = [ 
    { 
    "id": "1", 
    "image": "one.png" 
    }, 
    { 
    "id": "2", 
    "image": "two.png" 
    }, 
]; 

Он преобразуется в массив Perl ($thingsJSON является строковым представлением выше):

my $coder = JSON::XS->new->utf8; 
my $things = $coder->decode($thingsJSON); 

нужна функция карты на $things, возвращающую коллекция ($args), который выглядит следующим образом:

(
    image => "one.png", 
    image => "two.png" 
) 

Я хочу, чтобы иметь возможность пройти выше, как $args другой функции:

$Bar->find($args)

+0

Это не будет хэш; хэш никогда не имеет двух элементов с одним и тем же ключом. Вам просто нужен массив, содержащий список пар ключ/значение? – hobbs

+0

Да, массив объектов (хеши?) –

+0

Массив хэшей - это то, что у вас уже есть. Вы просто хотите удалить ключи «id»? – hobbs

ответ

1

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

@args = map { (image => $_->{image}) } @$things; 

для ясности, это то же самое, как

@args = map { ('image', $_->{image}) } @$things; 

, который, map просто возвращает список где все четные элементы являются строкой "image", и все элементы с нечетными номерами являются значением ключа image некоторого элемента в @$things.

+0

wow. похоже, это может сработать. tbh Я изучаю perl, поэтому концепция списка отвлекает меня. но первый проход выглядит сладким. Я дам ему попробовать и принять, если это сработает. Спасибо! –

+0

Я использовал вашу линию первой строки, но я получаю синтаксическую ошибку: 'near"} @ "' –

+0

Возможно, старая версия Perl? –

Смежные вопросы