简单数据结构优化升序、降序查找案例

针对性能优化 (sort只用一次)

<template>
    <div>
        <h2>考试</h2>
        <div>
            <!--<input v-model="searchInfo.queryInfo" @input="queryChange" type="text" placeholder="商品名称" >-->
            <input v-model="searchInfo.queryInfo" type="text" placeholder="商品名称" >
        </div>
        <table>
            <tr>
                <th>编号<arrow @click.native="idSortArr" :status="idSortStatus"></arrow></th>
                <th>名称</th>
                <th>价格<arrow @click.native="priceSortArr" :status="priceSortStatus"></arrow></th>
            </tr>
            <tr v-for="(item, index) in contentData" :key="item.id">
                <td>{
    
    {
    
    item.id}}</td>
                <td>{
    
    {
    
    item.goods_name}}</td>
                <td>{
    
    {
    
    item.price}}</td>
            </tr>
        </table>
        <page></page>
    </div>
</template>
<script>
    import page from "./components/page";
    import arrow from "./components/Arrow.vue";
    import data from "./assets/data";

    export default{
    
    
        components: {
    
    
            page,
            arrow
        },
        created(){
    
    
            this.res = data.data;
//            this.contentData = this.res;
            console.log("data===>",this.res)
        },
        data(){
    
    
            //Desc 降序   asc 升序
            return {
    
    
                res: null,
                searchInfo: {
    
    
                    queryInfo: "",
                    pageSize: 10,
                    pageNum: 1,
                },
                sortWay: "desc",
                sortBy: "id", //id price
            }
        },
        methods:{
    
    
            queryChange(){
    
    
                console.log("queryChange", this.searchInfo.queryInfo);

                let queryStr = this.searchInfo.queryInfo;
                /*let newData = [];
                for(let i=0;i<this.res.length;i++){
                    let item = this.res[i];
                    if(item.goods_name.indexOf(queryStr) !== -1){
                        newData.push(item)
                    }
                }
                this.contentData = newData;*/

                /*this.contentData = this.res.filter((item)=>{
                    if(item.goods_name.indexOf(queryStr) !== -1){
                        return item
                    }
                })*/
            },
            idSortArr(){
    
    
            /*
            根据点击事件来判断当前是根据id排序还是价格排序的 
*/
//                this.sortBy === 'price'
                this.sortBy = 'id'//点击时状态为id时进行id排序
                if(this.sortWay === "desc"){
    
    //状态为价格时变为未知状态即为空
                    this.sortWay = "asc"
                }else {
    
    //否则就是价格状态
                    this.sortWay = "desc"
                }
//                this.sortArr();//每次点击都要调用一排序
            },
            priceSortArr(){
    
    
                    this.sortBy = "price"//点击时状态为price时进行价格排序
                if(this.sortWay === "desc"){
    
    
                    this.sortWay = "asc"
                }else {
    
    
                    this.sortWay = "desc"
                }
//                this.sortArr();
            },
            //排序方法封装
            sortArr(){
    
    
                this.res.sort((a, b)=>{
    
    
                    return (a[this.sortBy] - b[this.sortBy]) * (this.sortWay === "desc" ? -1 : 1)
                });
            }
        },
        computed:{
    
    
            contentData(){
    
    
                let resData = this.res;

                //查找过滤
                let queryStr = this.searchInfo.queryInfo;
                resData = this.res.filter((item)=>{
    
    
                    if(item.goods_name.indexOf(queryStr) !== -1){
    
    
                        return item
                    }
                });


                resData.sort((a, b)=>{
    
    
                    return (a[this.sortBy] - b[this.sortBy]) * (this.sortWay === "desc" ? -1 : 1)
                });

                return resData
            },
            idSortStatus(){
    
    
                if(this.sortBy === "id"){
    
    
                    return this.sortWay === "desc"? "up" : "down"
                }else{
    
    

                    return "none"
                }
            },
            priceSortStatus(){
    
    

                if(this.sortBy === "price"){
    
    
                    return this.sortWay === "desc"? "up" : "down"
                }else{
    
    

                    return "none"
                }
            }
        }
    }
</script>

猜你喜欢

转载自blog.csdn.net/zms2000919/article/details/115346943
今日推荐