2017-03-19 23 views
7

V-for döngüsünde görüntülemeden önce bir diziyi ada veya cinsiyete göre nasıl sıralayabilirim? https://jsfiddle.net/rg50h7hx/Vue.js içinde bir dizi sıralama

<div id="string"> 
    <ul> 
    <li v-for="array in arrays">{{ array.name }}</li> 
    </ul> 
</div> 
// Vue.js v. 2.1.8 
var string = new Vue({ 
    el: '#string', 
    data: { 
    arrays: [ 
     { name: 'kano', sex: 'man' }, 
     { name: 'striker', sex: 'man' }, 
     { name: 'sonya', sex: 'woman' }, 
     { name: 'sindell', sex: 'woman' }, 
     { name: 'subzero', sex: 'man' } 
    ] 
    } 
}) 

Ben bir "bilgisayarlı" kullanmak zorunda mıyım, ya da her neyse?

+0

Sen dönmeden önce diziyi sıralar, bir alıcı yöntemini yapma deneyebilirsiniz. Düzenleme: Tam olarak ne yaptığınızı hesapladığınız gibi görünebilir. Buradaki belgelere bakın: https://vuex.vuejs.org/en/getters.html – Christopher

+0

@Christopher Teşekkür ederim. Ben saf vue çalışmak istedim, belki benim için vuex çok zor ... – user3798618

+0

Ben o zaman ayarlandığında verileri önceden tahmin emin olmanız gerektiğini düşünüyorum. Teknik olarak bile veri gibi bir şey yapabilirsiniz: {diziler: [3, 2, 1] .sort()}. Not Bir object özelliğine göre sıralamak için sort işlevini bir callback ile kullanmanız gerekir. – Christopher

cevap

14

Evet, aşağıdaki gibi sortedArray dönebilirsiniz hesaplanan bir özellik oluşturmak olabilir bunu yapmanın kolay bir yolu:

computed: { 
    sortedArray: function() { 
    function compare(a, b) { 
     if (a.name < b.name) 
     return -1; 
     if (a.name > b.name) 
     return 1; 
     return 0; 
    } 

    return this.arrays.sort(compare); 
    } 
} 

Bkz demo çalışma.

Karşılaştırma işlemi yapan here sıralamasının belgelerini bulabilirsiniz.

compareFunction Sıralama düzenini tanımlayan bir işlevi belirtir. Eğer atlanırsa, dizi, her bir elemanın dizi dönüşümüne göre her bir karakterin Unicode kod noktası değerine göre sıralanır. ok fonksiyonları ile

+0

Sen benim kahramanımsın)) Böylesine basit bir örnekte, her şeyi anladım! Teşekkür ederim! – user3798618

+0

Size başka bir soru sorabilir miyim? Burada neden iki işlev kullanılıyor? İkinci fonksiyon, A'ya ne yapılması gerektiğini ve B'ye neyi bilmesi gerektiğini nasıl biliyor? – user3798618

+0

@ user3798618 Lütfen ek ayrıntılara bakın, herhangi bir sorun olursa haberim olsun? – Saurabh

4

ES6:

sortedArray(){ 
    return this.arrays.sort((a, b) => a.name > b.name); 
}