2017-02-20 20 views
0

Im цикл через некоторые коллекции (называемые категориями в Shopify Liquid), и мне нужно отобразить все эти коллекции в массив, чтобы я мог получить доступ к их индексам.Сбросить несколько объектов в массив

Что Im делает сейчас это:

{% for link in linklists[page.handle].links limit:1 %} 
{% assign collection = link.object %} 

// Im doing the above code somewhere above in the liquid file, thats where I get the link.object 


<script> 
    var collections = {{ link.object | json }}; 
    console.log(collections); 
</script> 

И это результат я получаю:

enter image description here

мне нужен результат, чтобы быть, как это, в массиве: enter image description here enter image description here

Как я могу передать эти объекты в массив l ike Я показал для изображений ниже?

/********** EDIT *******/

Когда я использую Array.of(), как это:

console.log(Array.of(collections)); 

Я получаю это : enter image description here

Но все эти объекты все еще не находятся в массиве. Может быть, подтолкнуть его на один уровень?

+0

Вероятно, что-то вроде этого 'Object.values ​​(коллекции)' –

+0

Нет, это просто оказывается все значения в объекте для массива. Мне нужно, чтобы все родительские объекты Object были переданы в массив. – David

ответ

2

Почему вы инициируете переменную коллекции внутри цикла for? Попробуйте

<script>var collections = new Array</script> 
{% for link in linklists[page.handle].links limit:1 %} 
{% assign collection = link.object %} 

// Im doing the above code somewhere above in the liquid file, thats where I get the link.object 


<script> 
    collections.push({{ link.object | json }}); 
    console.log(collections); 
</script> 
{% endfor %} 
0

не уверен, чего вы пытаетесь достичь, но посмотрите на метод Array.of.

Array.of({obj1Prop1: 'value1'}, { obj2Prop1: 'value2'}); 

тем не менее - это выглядит, как ваши коллекции на самом деле это коллекция, и вы поэтому вы, возможно, ищете массив в более высоком объеме, определенный и просто нажать/CONCAT их вместе, как только вы достигаете код с вашей коллекцией.

+0

Да, им нужно взять все эти объекты и сделать их в массив: я сделал то, что вы сказали, и добавил Array.of() следующим образом: console.log (Array.of (коллекции)); Это дало мне результат, который я привел выше в разделе редактирования: – David

+0

да, как я уже говорил - используйте push в массив, определенный в более высокой области. @hymnz предоставил вам пример этого. –

0

объект, вероятно, более полезным в большинстве случаев, но вы можете так что-то вроде этого:

<script> 
    var collections = { 

    "collections": [{% for collection in collections %} 
     { 
     {% if collection.image %}"image": "{{ collection.image }}",{% endif %} 
     "body_html": "{{ collection.description | url_escape }}", 
     "handle": "{{ collection.handle }}", 
     "id": {{ collection.id }}, 
     "sort_order": "{{ collection.default_sort_by }}", 
     "template_suffix": "{{ collection.template_suffix }}", 
     "title": "{{ collection.title }}", 
     "products_count": {{ collection.products_count }}, 
     "url": "{{ collection.url }}", 
     "products": [] 
     }{% unless forloop.last %},{% endunless %}{% endfor %} 
    ] 
    } 
</script> 
Смежные вопросы