2017-02-20 4 views
0

Ich bin im Loop durch einige Sammlungen (Kategorien in Shopify Liquid), und ich muss alle diese Sammlungen in ein Array werfen, so dass ich auf ihre Indizes zugreifen kann.Wirf mehrere Objekte in ein Array

Was Im jetzt tun, ist dies:

{% 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> 

Und das ist das Ergebnis, das ich bekommen:

enter image description here

Ich brauche das Ergebnis so sein, in einem Array: enter image description here enter image description here

Wie kann ich diese Menge von Objekten zu Array l Ike ich habe für die Bilder unten gezeigt?

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

Wenn ich Array.of() verwenden, wie folgt aus:

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

ich dieses : enter image description here

Aber alle diese Objekte sind immer noch nicht in einem Array. Vielleicht eine Stufe höher schieben?

+0

Wahrscheinlich so etwas wie dieses 'Object.values ​​(Sammlungen)' –

+0

Nein, das gerade dreht alle Werte in einem Objekt für ein Array. Ich brauche alle übergeordneten "Objekte", die in ein Array umgewandelt werden sollen. – David

Antwort

2

Warum initiieren Sie die Auflistungsvariable innerhalb der for-Schleife? Versuchen Sie, diese

<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

nicht sicher, was Sie erreichen möchten, aber werfen Sie einen Blick auf die Array.of-Methode.

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

dennoch - es sieht aus wie Ihre Sammlungen eigentlich eine Sammlung sind und Sie deshalb suchen Sie vielleicht für ein Array in einem höheren Umfang definiert und nur Push/concat sie zusammen, wenn Sie Ihren Code mit Ihrer Sammlung erreichen.

+0

Ja, ich suche nach all diesen Objekten und mache sie zu einem Array: Ich habe getan, was Sie gesagt haben, und das Array.of() hinzugefügt: console.log (Array.of (Sammlungen)); Das gab mir das Ergebnis, das ich oben im Edit-Abschnitt angegeben habe: – David

+0

Ja, wie ich schon sagte - benutze einen Push in ein Array, das in einem höheren Bereich definiert ist. @hymnz hat dir dafür ein Beispiel gegeben. –

0

Das Objekt ist wahrscheinlich sinnvoller in den meisten Fällen, aber Sie können so etwas wie folgt aus:

<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>