Javascript 加密货币价格排序问题(vue.js)

Javascript 加密货币价格排序问题(vue.js),javascript,vue.js,sorting,Javascript,Vue.js,Sorting,我对sort()方法有一个问题,我无法解决 所以基本上我有一个api加密货币表,它可以按列排序。 除了硬币的价格外,一切正常(等级、名称、市值等)。这就是排序不正确。例如,BTC的价格总是在中间某个地方结束。api中的价格是一个字符串 这是我用来排序的方法 sortBy (prop) { if (this.sorter === 'inc') { this.cryptos.sort((a, b) => a[prop] > b[prop] ? 1 : -1) th

我对sort()方法有一个问题,我无法解决

所以基本上我有一个api加密货币表,它可以按列排序。 除了硬币的价格外,一切正常(等级、名称、市值等)。这就是排序不正确。例如,BTC的价格总是在中间某个地方结束。api中的价格是一个字符串

这是我用来排序的方法

 sortBy (prop) {
  if (this.sorter === 'inc') {
    this.cryptos.sort((a, b) => a[prop] > b[prop] ? 1 : -1)
    this.sorter = 'dec'
  } else {
    this.cryptos.sort((a, b) => a[prop] > b[prop] ? -1 : 1)
    this.sorter = 'inc'
  }
},
这就是我调用方法的方式

 <tr>
    <th class="table-header table-link" v-on:click="sortBy('rank')">Rank</th>
    <th class="table-header">Icon</th>
    <th class="table-header table-link" v-on:click="sortBy('name')">Name</th>
    <th class="table-header">Symbol</th>
    <th class="table-header table-link" v-on:click="sortBy('price')">Price</th>
    <th class="table-header table-link" v-on:click="sortBy('change')">{{time}}</th>
    <th class="table-header table-link" v-on:click="sortBy('marketCap')">Market Cap</th>
 </tr>
我希望我提供了足够的信息,也许有人能帮我。 提前谢谢你

.sort()
按字典顺序对字符串进行排序(JS引擎逐个字符检查数字),因此需要将它们转换为数字

// It's great for sorting strings
[
  `464.2807003746`, 
  `15150.0527417405`, 
  `0.5010685149`
].sort((a, b) => a > b ? 1 : -1)
//=> [('0.5010685149', '15150.0527417405', '464.2807003746')];

// Convert strings to numbers
[
  `464.2807003746`, 
  `15150.0527417405`, 
  `0.5010685149`
].sort((a, b) => Number(a) > Number(b) ? 1 : -1)
//=> "0.5010685149", "464.2807003746", "15150.0527417405"]


// Convert strings to numbers implicitly
[
  `464.2807003746`, 
  `15150.0527417405`, 
  `0.5010685149`
].sort((a, b) => a - b)
//=> "0.5010685149", "464.2807003746", "15150.0527417405"]


您可以通过方法在
排序中包含一个条件,并检查
属性
是否为价格。

因为它们是字符串,所以它们的排序如下:1、15、166、2、20、3、34?我认为您应该在sortBy函数中使用
parseFloat(prop)
,但只能用于float或int值(不用于name)。
。].map(Number)。sort(…
可能比在每个函数上应用更有效check@LawrenceCherone,啊,是的,或者我们可以隐式地转换它们:
.sort((a,b)=>a-b)
非常感谢!它现在起作用了!实际上我已经尝试将它改为数字了。但我可能做错了什么。@毛里斯布鲁很高兴听到它现在起作用了。如果你认为它解决了你的问题,你也可以接受我的答案;)
// It's great for sorting strings
[
  `464.2807003746`, 
  `15150.0527417405`, 
  `0.5010685149`
].sort((a, b) => a > b ? 1 : -1)
//=> [('0.5010685149', '15150.0527417405', '464.2807003746')];

// Convert strings to numbers
[
  `464.2807003746`, 
  `15150.0527417405`, 
  `0.5010685149`
].sort((a, b) => Number(a) > Number(b) ? 1 : -1)
//=> "0.5010685149", "464.2807003746", "15150.0527417405"]


// Convert strings to numbers implicitly
[
  `464.2807003746`, 
  `15150.0527417405`, 
  `0.5010685149`
].sort((a, b) => a - b)
//=> "0.5010685149", "464.2807003746", "15150.0527417405"]