我目前正在练习Vue.js,我遇到了一个关于Vue.js中数组排序的问题。排序(a-b)应该执行升序,即最小字母/值优先,但数组仍然相同。秩序没有改变。我在计算属性中有一个函数,但它不起作用。我被困在这里好几个小时了。下面是我的代码
<template>
<div>
<Navbar/>
<div class="container p-4">
<h1>{{ title }}</h1><br />
<br>
<Button/>
<Table :people="sortedPeople"/>
</div>
<Modal @submit="submitPerson" />
</div>
</template>
<script>
import Navbar from './components/Navbar.vue'
import Button from './components/Button'
import Table from './components/Table.vue'
import Modal from './components/Modal.vue'
export default {
name: 'App',
data(){
return {
title: 'People',
name:'Rename This',
people: [
{
fname: 'Ab',
lname: 'Zigzag'
},
{
fname: 'Al',
lname: 'Alabasta'
}
],
}
},
components: { Button, Navbar, Table, Modal },
computed:{
sortedPeople(){
return this.people.sort((a, b) => a.lname - b.lname)
}
},
methods: {
submitPerson(person) {
if(person.first_name && person.last_name) {
this.people.push({ fname: person.first_name, lname: person.last_name })
}
}
}
}
</script>
这是我的表组件,
<template>
<table class="table table-sm table-responsive table-hover">
<thead>
<tr>
<th>Number</th>
<th>Names</th>
<th>Score</th>
</tr>
</thead>
<tbody v-for="(person, i) in people">
<tr>
<td>{{ i+=1 }}</td>
<td>{{ person.fname+" "+person.lname }}</td>
<td>{{ Math.floor(Math.random() * 100) }}/100</td>
</tr>
</tbody>
</table>
</template>
<script>
export default {
name: "Table",
props: { people: Array },
}
</script>
如何正确使用计算财产?先谢了。
3条答案
按热度按时间b1uwtaje1#
要在JavaScript中对字符串数组进行排序,您应该使用localeCompare方法:
当使用sort比较字符串时,减法运算
a.lname - b.lname
将导致NaN另外,请注意
slice()
的使用。如果没有slice()
,sort方法将对people数组进行排序,修改原始数组。nsc4cvqm2#
使用localeCompare()比较字符串,即
sort((a, b) => a.lname.localeCompare(b.lname))
kmpatx3s3#
您可以在比较器功能中正常检查所有条件。