vue js 不按键对数组进行排序

Posted

技术标签:

【中文标题】vue js 不按键对数组进行排序【英文标题】:vue js DO NOT sort array by keys 【发布时间】:2018-03-13 15:42:04 【问题描述】:

我用vue js做了一个购物车,想保持产品按输入的顺序显示。问题是产品是关联数组,其 id 用于键 类似[1 => ['name' => 'product1', 'price' => 100', 'quantity' => 1]] 其中键 1 是产品的 id。问题是当我将购物车对象作为 json 返回时,产品数组默认按其键查看排序。 这是我的代码:

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 似乎默认订购它们。如何避免?

【问题讨论】:

如果添加到购物车的顺序很重要,您应该在添加时将顺序存储为对象的属性。 这就像你的服务器端代码可能正在订购它 @chiliNUT 我查过了,返回的服务端json没问题,是vue js重新排序 您能否从浏览器网络调用中发布“axios.post(app.addToCartRoute)”的请求负载和响应 【参考方案1】:

借用另一个*** answer:

javascript 没有您想象中的“关联数组”。相反,您只需能够使用类似数组的语法设置对象属性,以及迭代对象属性的能力。

这样做的结果是无法保证您遍历属性的顺序...

换句话说,Vue 不会重新排序您的数据。相反,response.data 是一个对象,而 Javascript 对象没有与 php 关联数组相同的“顺序”概念。

如果产品的排序很重要,那么您应该将每个产品与一个位置相关联。然后,为了显示它们,您可以使用该位置信息对它们进行排序。

【讨论】:

这是正确的解决方案,以防其他人遇到这个问题。 我通过在键前添加“_”来修复它,因此键现在看起来像这样:“_3”、“_5”等等,并且不再重新排序

以上是关于vue js 不按键对数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js - 如何按特定属性对数组中的对象进行排序并使用“v-for”进行渲染

如何按键排序对象数组?无法正确处理

如何在Vue中对对象数组进行排序和过滤

二维数组重新排序

js,vue.js一些方法的总结

Vue 将被侦听的数组的变更方法进行了包裹