鱼C论坛

 找回密码
 立即注册
查看: 4438|回复: 6

[技术交流] 优化重复代码 | 【有奖问答】

[复制链接]
发表于 2017-8-30 10:45:22 | 显示全部楼层 |阅读模式
50鱼币
本帖最后由 不二如是 于 2017-8-30 10:48 编辑

这是一段“重复性”很高的代码


哪位鱼油可以通过封装函数对下面的代码优化呢?

友情提示:

1、4个不同的id,jsonTip1、jsonTip2、jsonTip3、jsonTip4

2、调用方法均一样,除了参数col索引不一样,方法均相同

3、4个方法,appendD1()、appendD2()、appendD3()、appendD4()



function appendD1() {
    $.getJSON("js/data.json", function (data) {
        var $jsontip = $("#jsonTip1");

        function sortByKey(array, key) {
            return array.sort(function (a, b) {
                var x = a[key];
                var y = b[key];
                return ((x > y) ? -1 : ((x < y) ? 1 : 0));
            });
        }

        var newdata = $.extend({}, data.data);
        newdata.rows = [];

        $.each(data.data.rows, function (i, r) {
            var item = {};
            $.each(r.cells, function (j, c) {
                item["col" + j] = c;
            })
            newdata.rows.push(item);
        })

        newdata = sortByKey(newdata.rows, 'col1');


        // 绘制
        var strHtml = "";//存储数据的变量
        $jsontip.empty();//清空内容
        $.each(newdata, function (infoIndex, info) {
            strHtml += `
            <tr>
              <td><b class="roleNum">${infoIndex + 1}</b></td>
              <td>${info["col0"]}</td>
              <td>${info["col1"]}</td>
                      </tr>
          `;
        })
        $jsontip.html(strHtml);//显示处理后的数据


        // 前十个tr中,第一个td中的b,设置背景样式。
        $.each($('#div1 tr').slice(1, 11), function (i, item) {
            $(item).children('td').eq(0).children('b').css("background-color", "#3590de");
        });

        $.each($('#div1 tr').slice(1, 7), function (i, item) {
            $(item).children('td').eq(1).css("color", "#0002c0");
        });
    })
}

function appendD2() {

    $.getJSON("js/data.json", function (data) {
        var $jsontip = $("#jsonTip2");

        // 排序测试
        function sortByKey(array, key) {
            return array.sort(function (a, b) {
                var x = a[key];
                var y = b[key];
                return ((x > y) ? -1 : ((x < y) ? 1 : 0));
            });
        }


        var newdata = $.extend({}, data.data);
        newdata.rows = [];

        $.each(data.data.rows, function (i, r) {
            var item = {};
            $.each(r.cells, function (j, c) {
                item["col" + j] = c;
            })
            newdata.rows.push(item);
        })

        newdata = sortByKey(newdata.rows, 'col2');


        // 绘制
        var strHtml = "";//存储数据的变量
        $jsontip.empty();//清空内容
        $.each(newdata, function (infoIndex, info) {
            strHtml += `
            <tr>
              <td><b class="roleNum">${infoIndex + 1}</b></td>
              <td>${info["col0"]}</td>
              <td>${info["col2"]}</td>
                      </tr>
          `;
        })
        $jsontip.html(strHtml);//显示处理后的数据


        $.each($('#div2 tr').slice(1, 5), function (i, item) {
            $(item).children('td').eq(0).children('b').css("background-color", "#3590de");
        });

        $.each($('#div2 tr').slice(1, 3), function (i, item) {
            $(item).children('td').eq(1).css("color", "#0002c0");
        });
    })
}

function appendD3() {
    $.getJSON("js/data.json", function (data) {
        var $jsontip = $("#jsonTip3");

        // 排序测试
        function sortByKey(array, key) {
            return array.sort(function (a, b) {
                var x = a[key];
                var y = b[key];
                return ((x > y) ? -1 : ((x < y) ? 1 : 0));
            });
        }


        var newdata = $.extend({}, data.data);
        newdata.rows = [];

        $.each(data.data.rows, function (i, r) {
            var item = {};
            $.each(r.cells, function (j, c) {
                item["col" + j] = c;
            })
            newdata.rows.push(item);
        })

        newdata = sortByKey(newdata.rows, 'col3');


        // 绘制
        var strHtml = "";//存储数据的变量
        $jsontip.empty();//清空内容
        $.each(newdata, function (infoIndex, info) {
            strHtml += `
            <tr>
              <td><b class="roleNum">${infoIndex + 1}</b></td>
              <td>${info["col0"]}</td>
              <td>${info["col3"]}</td>
                      </tr>
          `;
        })
        $jsontip.html(strHtml);//显示处理后的数据


        $.each($('#div3 tr').slice(1, 8), function (i, item) {
            $(item).children('td').eq(0).children('b').css("background-color", "#3590de");
        });

        $.each($('#div3 tr').slice(1, 5), function (i, item) {
            $(item).children('td').eq(1).css("color", "#0002c0");
        });
    })
}

function appendD4() {
    $.getJSON("js/data.json", function (data) {
        var $jsontip = $("#jsonTip4");

        // 排序测试
        function sortByKey(array, key) {
            return array.sort(function (a, b) {
                var x = a[key];
                var y = b[key];
                return ((x > y) ? -1 : ((x < y) ? 1 : 0));
            });
        }


        var newdata = $.extend({}, data.data);
        newdata.rows = [];

        $.each(data.data.rows, function (i, r) {
            var item = {};
            $.each(r.cells, function (j, c) {
                item["col" + j] = c;
            })
            newdata.rows.push(item);
        })

        newdata = sortByKey(newdata.rows, 'col4');


        // 绘制
        var strHtml = "";//存储数据的变量
        $jsontip.empty();//清空内容
        $.each(newdata, function (infoIndex, info) {
            strHtml += `
            <tr>
              <td><b class="roleNum">${infoIndex + 1}</b></td>
              <td>${info["col0"]}</td>
              <td>${info["col4"]}</td>
                      </tr>
          `;
        })
        $jsontip.html(strHtml);//显示处理后的数据


        $.each($('#div4 tr').slice(1, 9), function (i, item) {
            $(item).children('td').eq(0).children('b').css("background-color", "#3590de");
        });

        $.each($('#div4 tr').slice(1, 6), function (i, item) {
            $(item).children('td').eq(1).css("color", "#0002c0");
        });
    })
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-5 19:25:53 | 显示全部楼层
能给一份json文件,让我看看。主要是测试一下到底要生成什么内容。  
我在python经常写通用性很高的代码。js也想试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-19 11:45:49 | 显示全部楼层
好~~~~~~长.................
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-25 12:24:47 | 显示全部楼层
appendmy(1,11,7);
appendmy(2,5,3);
appendmy(3,8,5);
appendmy(4,9,6);
function appendmy(n,m,k) {
    $.getJSON("js/data.json", function (data) {
        var $jsontip = $("#jsonTip"+n);

        function sortByKey(array, key) {
            return array.sort(function (a, b) {
                var x = a[key];
                var y = b[key];
                return ((x > y) ? -1 : ((x < y) ? 1 : 0));
            });
        }
        var newdata = $.extend({}, data.data);
        newdata.rows = [];

        $.each(data.data.rows, function (i, r) {
            var item = {};
            $.each(r.cells, function (j, c) {
                item["col" + j] = c;
            })
            newdata.rows.push(item);
        })
        newdata = sortByKey(newdata.rows, 'col'+n);
        // 绘制
        var strHtml = "";//存储数据的变量
        $jsontip.empty();//清空内容
        $.each(newdata, function (infoIndex, info) {
            strHtml +='\
            <tr>\
              <td><b class="roleNum">${infoIndex + 1}</b></td>\
              <td>${info["col0"]}</td>\
              <td>${info["col"+'+n+']}</td></tr>\
            ';
        })
        $jsontip.html(strHtml);//显示处理后的数据
        // 前十个tr中,第一个td中的b,设置背景样式。
        $.each($('#div'+n+'tr').slice(1, m), function (i, item) {
            $(item).children('td').eq(0).children('b').css("background-color", "#3590de");
        });
        $.each($('#div'+n+'tr').slice(1, k), function (i, item) {
            $(item).children('td').eq(1).css("color", "#0002c0");
        });
    })
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-15 14:19:15 | 显示全部楼层
太————————————————————长————————————————————了————————————————————
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-21 20:10:13 | 显示全部楼层
有点长啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-21 08:57:51 | 显示全部楼层
好长。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 22:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表