Vue.JS中Computed属性中的数组排序不工作

kgsdhlau  于 2023-10-23  发布在  Vue.js
关注(0)|答案(3)|浏览(184)

我目前正在练习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>

如何正确使用计算财产?先谢了。

b1uwtaje

b1uwtaje1#

要在JavaScript中对字符串数组进行排序,您应该使用localeCompare方法:

computed: {
  sortedPeople() {
    return this.people.slice().sort((a, b) => a.lname.localeCompare(b.lname));
  }
}

当使用sort比较字符串时,减法运算a.lname - b.lname将导致NaN
另外,请注意slice()的使用。如果没有slice(),sort方法将对people数组进行排序,修改原始数组。

nsc4cvqm

nsc4cvqm2#

使用localeCompare()比较字符串,即sort((a, b) => a.lname.localeCompare(b.lname))

kmpatx3s

kmpatx3s3#

您可以在比较器功能中正常检查所有条件。

this.people.sort((a,b) => {
  if (a.lname < b.lname) return -1
  if (a.lname > b.lname) return 1
  return 0
});

相关问题