Javascript 加密货币价格排序问题(vue.js)
我对sort()方法有一个问题,我无法解决 所以基本上我有一个api加密货币表,它可以按列排序。 除了硬币的价格外,一切正常(等级、名称、市值等)。这就是排序不正确。例如,BTC的价格总是在中间某个地方结束。api中的价格是一个字符串 这是我用来排序的方法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
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"]