2017-10-02 16 views
0

私はvue jsでショッピングカートを作っており、入力した順序で商品を表示したいと考えています。問題は、その製品のIDがキーに使用されている連想配列です。 [1 => ['name' => 'product1', 'price' => 100', 'quantity' => 1]] ここで、キー1は製品のIDです。問題は、カートのオブジェクトをjsonとして返すときに、製品配列がデフォルトでキーによって表示されるようになっていることです。 ここに私のコードです:vue jsキーで配列を並べ替えることはできません

let app = this 
axios.post(app.addToCartRoute, { 
    _token: '{{ csrf_token() }}', 
    product_slug: slug 
}) 
.then(function(response) { 
    if(!app.showCart) { 
     setTimeout(() => { 
      app.cart = response.data 
     }, 250) 
    } 
    else { 
     app.cart = response.data 
    } 
     app.showCart = true 
     console.log(response.data) 
}) 
.catch(function(error) { 
    console.log(error) 
}) 

のは、私が最初の配列は次のようになりますカートにID 3で製品を追加するとしましょう:[3 => ['name' => 'product3', 'price' => 15.00]]、その後、私は配列はこのように見て開始し、ID 1を持つ製品を追加:[1 => ['name' => 'product1', 'price' => 13.00], 3 => ['name' => 'product3', 'price' => 15.00]] 私はいけませんそれを望みますが、vue jsはデフォルトでそれらを注文するようです。それを避ける方法は?

+0

カートに追加された順番が重要な場合は、追加された順序でオブジェクトのプロパティとして注文を保存する必要があります。 – Bert

+0

あなたのサーバー側のコードが注文している可能性があります – chiliNUT

+0

@chiliNUT私はそれをチェックしました。返されるサーバー側のjsonは大丈夫です、それらを並べ替えるvue jsです。 – TheAngelM97

答えて

1

stackoverflow answerからの借入:

Javascriptが「連想配列」あなたがそれらを考えている方法はありません。その代わりに、配列のような構文と、オブジェクトのプロパティを反復する機能を使用して、オブジェクトのプロパティを設定することができます。言い換えれば

これの結末は、あなたがプロパティを反復処理するためによう保証がないということです...

、Vueがあなたのデータを並べ替えていません。むしろ、response.dataはオブジェクトであり、JavascriptオブジェクトはPHPの連想配列と同じ "注文"の概念を持っていません。

製品の発注が重要な場合は、各製品を特定の位置に関連付ける必要があります。次に、それらを表示するには、その位置情報を使用してそれらを並べ替えることができます。

+0

これは正しい解決策です。 – th3n3wguy

+0

キーの前に '_'を追加してキーを修正しました。これで、 '_3'、 '_5'などのようになりました。 – TheAngelM97

関連する問題