2018-01-05 关于排序、《荒蛮故事》、列表点击自动排序

2018-01-08  本文已影响0人  胡諾

第一组:姚成栋 关于排序

有两种排序的方式:前端js,后台LINQ

  1. js:

JavaScript实现多维数组、对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序。
sort() 方法用于对数组的元素进行排序。语法如下:arrayObject.sort(sortby)

返回值为对数组的引用。请注意,数组在原数组上进行排序,不生成副本。

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

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

function NumAscSort(a,b)
{
 return a - b;
}
function NumDescSort(a,b)
{
 return b - a;
}
var arr = new Array( 3600, 5010, 10100, 801); 
arr.sort(NumDescSort);
alert(arr);
arr.sort(NumAscSort);
alert(arr);

sort(fun)接受了个排序规则函数,这个函数将比较2个数字的大小。而我们的对象数组排序,实际上原理也是一样的。

如果不比较数字的大小,则可以这样:

var myarray=["Apple", "Banana", "Orange"]
myarray.sort()

数组直接调用sort()后,数组按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。

对于对象数组排序,我们先写一个构造比较函数的函数:

//by函数接受一个成员名字符串做为参数
//并返回一个可以用来对包含该成员的对象数组进行排序的比较函数
var by = function(name){
 return function(o, p){
   var a, b;
   if (typeof o === "object" && typeof p === "object" && o && p) {
     a = o[name];
     b = p[name];
     if (a === b) {
       return 0;
     }
     if (typeof a === typeof b) {
       return a < b ? -1 : 1;
     }
     return typeof a < typeof b ? -1 : 1;
   }
   else {
     throw ("error");
   }
 }
}

要排序的数组:

var employees=[]
employees[0]={name:"George", age:32, retiredate:"March 12, 2014"}
employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"}
employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"}
employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"}

直接调用函数:

employees.sort(by("age"));

到这里,对象数组排序就算基本实现了。那如何实现多个键值排序呢?意思就是先是对age排序,如果age相同,再比较name。

这时,我们可以进一步修改by函数,让其可以接受第二个参数,当主要的键值产生一个匹配的时候,另一个compare方法将被调用以决出高下。

//by函数接受一个成员名字符串和一个可选的次要比较函数做为参数
//并返回一个可以用来包含该成员的对象数组进行排序的比较函数
//当o[age] 和 p[age] 相等时,次要比较函数被用来决出高下
var by = function(name,minor){
 return function(o,p){
   var a,b;
   if(o && p && typeof o === 'object' && typeof p ==='object'){
     a = o[name];
     b = p[name];
     if(a === b){
       return typeof minor === 'function' ? minor(o,p):0;
     }
     if(typeof a === typeof b){
       return a < b ? -1:1;
     }
     return typeof a < typeof b ? -1 : 1;
   }else{
     thro("error");
   }
 }
}

employees.sort(by('age',by('name')));
  1. LINQ
    基本语法为:
orderby .. ascending | descending[, ..ascending | descending](其中ascending表示升序排列,descending表示降序排列)

举个两个例子:

var query = from student in students
orderby student.ID ascending /*descending*/
select student; //查询表达式
qualifTypes.Where(k=>k.QT_QualificationCode==item.IM_InspectorTypeCode).ToArray();// 查询操作符

第二组:叶佳意 《荒蛮故事》

今天推荐一部西班牙的电影——《荒蛮故事》。该片由六个独立短片组成,讲述了以航班、饭馆、路怒、罚单、肇事和婚礼为主题的复仇故事。每个故事结构都十分紧张。情节的高潮是在猝不及防之下突然降临的。电影从一位漂亮的模特登机开始,模特在登上飞机后遇到风度翩翩的乐评家,他们提到都认识的加百列·帕斯特纳克,然后附近的人纷纷响应,他们都认识。居然全机舱的乘客都认识帕斯特纳克,都得罪过他。有个乘客说听闻帕斯特纳克最近成了飞行员,最后飞机爆炸了。帕斯特纳克癫狂的复仇行动和后面五个复仇小故事一样,突如其来,一波三折。影片反映了社会上的各种光鲜亮丽背后,潜藏着的不为人知的糜烂和无法愈合的阴暗面以及各种人性的丑恶...每个小故事的主角都在压力下释放了自我,实施了一闪而过的犯罪念头,发泄了被压抑的情绪,让看客拍手称快。即是荒诞的闹剧,也是对社会种种现象的尖锐抨击。


第三组: 列表点击自动排序

如下图:点击年度前


点击年度后


在<th>中加个class = "enablesorte" id ="xxx" ,id即该字段的id


第四组:李俊 "use strict" 和懒惰、处理一个数组或单个元素作为参数的方法

1. "use strict" 和懒惰

严格模式的JavaScript让开发人员更加安全的编写JavaScript。

默认情况下,JavaScript允许开发者懒惰,例如,我们在第一次声明变量的时候可以不用var,虽然这可能看起来像一个没有经验的开发人员,同时这也是很多错误的根源,变量名拼写错误或意外地将它提到了外部作用域。

程序员喜欢让电脑为我们做些无聊的事,检查一些我们工作的错误。"use strict"指令我们做这些,将我们的错误转换成JavaScript的错误。

我们把这个指令可以通过添加在一个js文件的顶部:

// 整个script文件都将是严格模式语法
"use strict";
var v = "Hi! I'm a strict mode script!";
或者在函数内:
function f()
{
// 函数范围内的严格模式语法
'use strict';
function nested() { return "And so am I!"; }
return "Hi! I'm a strict mode function! " + nested();
}
function f2() { return "I'm not strict."; }

在包含这个指令的JavaScript文件或者函数内,我们将一些较大的JavaScript项目中的不良行为直接在JavaScript引擎执行中禁止了。在其他情况中,严格模式改变以下的行为:
· 变量只有在前面 var 声明了才能用
· 试图写入只读属性产生的误差
· 必须用 new 关键字调用构造函数
· this 不会默认指向全局对象
· 非常有限的使用eval()
· 保护保留字符或未来保留字符不被作为变量名使用
严格模式在新项目中是很有好处的,但是在大多数地方没使用到它的老项目里使用它是非常具有挑战性的。当你把多个文件合并到一个文件时,它也是个问题,就像可能导致整个文件都在严格模式下执行。
它不是一个声明,只是一个字面量,早期版本的浏览器会忽略它。严格模式支持:
· IE 10+
· FF 4+
· Chrome 13+
· Safari 5.1+
· Opera 12+

2 处理一个数组或单个元素作为参数的方法
3 undefined 和 null 的不同
4 以非ASCII字符形式来排序字符串
5 改善嵌套条件
6 ReactJs 子级构造的keys是很重要的
7 AngularJs: digest vsapply
8 在数组插入一个项

详情见链接:
2018-01-08 "use strict" 和懒惰、处理一个数组或单个元素作为参数的方法、undefined 和 null 的不同……


第五组:周倩宇 当英文遇上汉语 就知道汉语有多强大了

上一篇 下一篇

猜你喜欢

热点阅读