扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路


Posted in Javascript onMay 17, 2013

看了一段时间关于js原型的知识,js的扩展方法是基于原型的,如Array.prototype.XXXX就是给Array扩展XXX方法,然后数组都能使用这个方法了。

在对象数组里面经常有根据属性来进行排序的,升序,降序的,于是自己就想写一个类似于C#里面的orderBy的方法,代码如下:

Array.prototype.OrderByAsc = function (func) { 
var m = {}; 
for (var i = 0; i < this.length; i++) { 
for (var k = 0; k < this.length; k++) { 
if (func(this[i]) < func(this[k])) { 
m = this[k]; 
this[k] = this[i]; 
this[i] = m; 
} 
} 
} 
return this; 
} 
Array.prototype.OrderByDesc = function (func) { 
var m = {}; 
for (var i = 0; i < this.length; i++) { 
for (var k = 0; k < this.length; k++) { 
if (func(this[i]) > func(this[k])) { 
m = this[k]; 
this[k] = this[i]; 
this[i] = m; 
} 
} 
} 
return this; 
}

调用的方法如下:
var arr = [{ name: 'aaa', grade: 20 }, { name: 'ccc', grade: 30 }, { name: 'bbb', grade: 40 }]; 
var orderArr = arr.OrderByDesc(function (a) { 
return a.grade; 
});

然后输出一下,看一下结果吧:
for (var i = 0; i < orderArr.length; i++) { 
document.write(orderArr[i].name); 
}

本人js菜鸟,如果有什么想法啥的,直接留言,相互交流一下
Javascript 相关文章推荐
通过Mootools 1.2来操纵HTML DOM元素
Sep 15 Javascript
jQuery中需要注意的细节问题小结
Dec 06 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
Dec 17 Javascript
JavaScript弹出窗口方法汇总
Aug 12 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
Nov 30 Javascript
js实现select下拉框菜单
Dec 08 Javascript
Extjs实现下拉菜单效果
Apr 01 Javascript
onmouseover事件和onmouseout事件全面理解
Aug 15 Javascript
vue中路由参数传递可能会遇到的坑
Dec 07 Javascript
Vue官网todoMVC示例代码
Jan 29 Javascript
浅析从vue源码看观察者模式
Jan 29 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
Apr 25 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
May 17 #Javascript
javascript解决innerText浏览器兼容问题思路代码
May 17 #Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
May 17 #Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
May 17 #Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
May 17 #Javascript
extjs ColumnChart设置不同的颜色实现代码
May 17 #Javascript
JQuery设置和去除disabled属性的5种方法总结
May 16 #Javascript
You might like
mysql 全文搜索 技巧
2007/04/27 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
php多重接口的实现方法
2015/06/20 PHP
php 从一个数组中随机的取出若干个不同的数实例
2016/12/31 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
vue中各组件之间传递数据的方法示例
2017/07/27 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
vue-cli初始化项目中使用less的方法
2018/08/09 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
React学习之JSX与react事件实例分析
2020/01/06 Javascript
es6函数之rest参数用法实例分析
2020/04/18 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
Flask框架各种常见装饰器示例
2018/07/17 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
python获取交互式ssh shell的方法
2019/02/14 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
Regatta官网:英国最受欢迎的户外服装和鞋类品牌
2019/05/01 全球购物
竞选班长演讲稿
2013/12/30 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
会计专业导师推荐信
2014/03/08 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
个人学习总结范文
2015/02/15 职场文书
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS