vue 根据数组中某一项的值进行排序

一、前言

我在vue项目中遇到了一个表格排序的需求,根据某一项的值的大小从大到小调整数组顺序。

二、代码

表格大概是这个样子,样式和图片在代码中简化了。


<table class="recommend_table" cellspacing="0">
    <tr>
        <th>股票</th>
        <th @click="sort(‘in_price‘)">入选价</th>
        <th @click="sort(‘now_price‘)">最新价</th>
        <th @click="sort(‘increase‘)">模拟涨跌幅</th>
    </tr>
    <tr v-for="(item,index) in recommendlist" :key="index">
        <td>
            <div class="recommend_name">{{item.name}}</div>
            <div class="recommend_num">{{item.bn}}</div>
        </td>
        <td>{{item.in_price}}</td>
        <td>{{item.now_price}}</td>
        <td>{{item.increase}}%</td>
    </tr>
</table>

<script type="text/ecmascript-6">
    export default {
        data(){
            return{
                recommendlist: [
                    { name:‘高科石化‘, bn:‘002778‘, in_price: 20.68, now_price: 28.68, increase: 10.01 },
                    { name:‘中孚信息‘, bn:‘300659‘, in_price: 19.46, now_price: 17.46, increase: 9.06 },
                    { name:‘永福股份‘, bn:‘300712‘, in_price: 17.68, now_price: 32.68, increase: 2.01 }
                ],
                sortType: ‘in_price‘
            }
        },
        methods: {
            sort(type) {
                this.sortType = type;
                this.recommendlist.sort(this.compare(type));
                // switch(type){
                    // case ‘in_price‘:
                    //     this.sortType = ‘in_price‘;
                    //     this.recommendlist.sort(this.compare(‘in_price‘));
                    //     break;
                    // case ‘now_price‘:
                    //     this.sortType = ‘now_price‘;
                    //     this.recommendlist.sort(this.compare(‘now_price‘));
                    //     break;
                    // case ‘increase‘:
                    //     this.sortType = ‘increase‘;
                    //     this.recommendlist.sort(this.compare(‘increase‘));
                    //     break;
                // }
            },
            compare(attr) {
                return function(a,b){
                    var val1 = a[attr];
                    var val2 = b[attr];
                    return val2 - val1;
                }
            }
        }
    }
</script>

1. 排序方法

这里用到的是数组的sort方法,这个方法有一个需要注意的地方,就是不传参数的话,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。这并不是我们想要的排序方法,所以必须要传参。

sort方法的参数是一个函数,这个函数提供了一个比较方法,要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。

compare(key) {
    return function(a,b){
        var val1 = a[key];
        var val2 = b[key];
        return val2 - val1;
    }
}

在代码中,compare函数中的匿名函数就是这样一个函数,但这个函数外面又嵌套了一层,这是因为需要根据数组中的某一项来排序,所以需要把这一项的key值传进来。

2. 调用排序方法


sort(type) {
    this.sortType = type;
    this.recommendlist.sort(this.compare(type));

    // 注释部分
    switch(type){
        case ‘in_price‘:
            this.sortType = ‘in_price‘;
            this.recommendlist.sort(this.compare(‘in_price‘));
            break;
        case ‘now_price‘:
            this.sortType = ‘now_price‘;
            this.recommendlist.sort(this.compare(‘now_price‘));
            break;
        case ‘increase‘:
            this.sortType = ‘increase‘;
            this.recommendlist.sort(this.compare(‘increase‘));
            break;
    }

}

一开始我按照注释的部分写的,和我一样抽象能力不是特别好的人首先会想到要这样写,但是写出来之后发现三种情况不过是重复的代码,这时我就直接用最上面两行代码来代替,写完以后感觉内心一片平和。这种复用率高的代码简直让人太舒服了。

三、结语

虽然是一个简单的功能,但是非常值得归纳总结一下。

来源:https://segmentfault.com/a/1190000016199017

原文地址:https://www.cnblogs.com/lovellll/p/10145035.html

时间: 2024-10-30 01:57:20

vue 根据数组中某一项的值进行排序的相关文章

每天一道面试题--删除排序数组中的重复项 II(python实现)

删除排序数组中的重复项 II 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1: 给定 nums = [1,1,1,2,2,3], 函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 . 你不需要考虑数组中超出新长度后面的元素. 示例 2: 给定 nums = [0,0,1,1,1,1,2,3,

删除数组中某一项并输出删除后的数组

方法一: package delete;import java.util.Scanner;public class delete { public static void main(String[] args){ Scanner input = new Scanner(System.in); int[] num = new int[]{3,6,9,13}; System.out.print("请输入要删除的数:"); int number = input.nextInt(); bool

[LeetCode] Remove Duplicates from Sorted Array 有序数组中去除重复项

Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with constant memory. For example,Given input array A = [

[LeetCode] Remove Duplicates from Sorted Array II 有序数组中去除重复项之二

Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For example,Given sorted array A = [1,1,1,2,2,3], Your function should return length = 5, and A is now [1,1,2,2,3]. 这道题是之前那道Remove Duplicates from Sorted Array 有序数组中

通过递归使数组中没有重复项

//数组中删除值相同的项,使得数组中没有重复的项//数组自己的方法splice(a,b),在每次使用后会返回一个新的数组,因此必须使用递归得方法来使数组中相同的项删除,如果不这样就达不到这样的效果,有些项会被忽略掉//比如下面这个例子,如果不使用递归,输出的将是1,2,3,4,5,6,7,1很明显第一项和最后一项是相同的,没有达到我们预期的效果//使用递归就不存在这个问题了,输出将是1,2,3,4,5,6,7; 1 var arrzfs = [1,2,2,3,4,4,1,3,5,6,7,7,1,

Leetcode_删除排序数组中的重复项

Leetcode  删除排序数组中的重复项 题目: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用 额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2. 你不需要考虑数组中超出新长度后面的元素. 示例 2: 给定 nums = [0,0,1,1,1,2,2,3,3,4]

[leetcode] 26. 删除排序数组中的重复项

26. 删除排序数组中的重复项 一开始各种坐标变换把我绕晕了- -,恶心的水题 class Solution { public int removeDuplicates(int[] nums) { if (nums.length == 0) return 0; int j = 0; for (int i = 0; i < nums.length; i++) if (nums[i] != nums[j]) nums[++j] = nums[i]; return ++j; } } 原文地址:http

26. 删除排序数组中的重复项

26. 删除排序数组中的重复项 package com.test; import java.util.Arrays; public class Lesson026 { public static void main(String[] args) { int[] nums = {0,0,1,1,1,2,2,3,3,4}; int length = removeDuplicates(nums); System.out.println(length); } private static int rem

LeetCode:删除排序数组中的重复项||【80】

LeetCode:删除排序数组中的重复项||[80] 题目描述 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1: 给定 nums = [1,1,1,2,2,3], 函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 . 你不需要考虑数组中超出新长度后面的元素. 示例 2: 给定 nums =