用javascript如何实现按名称排序

JavaScript086

用javascript如何实现按名称排序,第1张

简单排序:

var arr = [1,8,4,5,9,3]

arr.sort()

console.log(arr)//1,3,4,5,8,9

console.log(arr.reverse())//9,8,5,4,3,1

1. 冒泡排序吧!

交换那里为什么这么做,看上去Books应该是Array,push是array的方法,是在array最后添加若干元素。而Books[i]应该是一个Book,你确定他有push这个方法吗?

这么写就可以了:

var tmp =$scope.reader.Books[j],

$scope.reader.Books[j] = $scope.reader.Books[j + 1],

$scope.reader.Books[j + 1] = tmp

2. 另外若不考虑排序的稳定性可以使用js原生的sort,很高效的。

1)

var arr = [1, 3, 2, 4]

arr.sort() //arr 变成了[1, 2, 3, 4]

2)

//按名称排序。

var arr = [{k: 1, v: 's'}, {k: 3, v: 's'}, {k: 2, v: 'f'}, {k: 4, v: 'h'}]

arr.sort(functoin(a, b) {

return a.k - b.k

})

//arr编程 [{k: 1, v: 's'}, {k: 2, v: 'f'}, {k: 3, v: 's'}, {k: 4, v: 'h'}

即可以按arr.k进行排序。

sort中的这个参数是个函数。函数返回负数表示a应该排在b的前面,正数相反(b在a的前面)。

3)

js原生的sort排序在不同的浏览器中的实现是不同的。请看下例:

在2)中若arr = [{k: 1, v: 's'}, {k: 3, v: 's'}, {k: 1, v: 'f'}, {k: 4, v: 'h'}]

即第2个(从0开始的)和第2个数据的k一样(arr[0].k==1 arr[2].k == 1)

这样的数据用2)的方式排序的结果怎么样的?

结果可能是: sfsh也有可能是fssh,因为sort里面的那个函数并没有强调返回0时谁应该在前面。

这就是排序的稳定性,稳定排序是指:排序时对于值相同的元素,其相对位置不会发生变化。据我说知:firefox排序算法是合并排序;chrome在对待少量数据是用插入排序,对待数据量较大时用快速排序(好像是以10个元素个数为界限);ie排序算法我不知道,但是好像它的排序很慢,它用的排序也是不稳定的(会不会用的是选择排序呢?)。

现在说一下个算法的稳定性和效率吧:

a).快排。顾名思义,效率很高(o(nlgn)),chrome选择了他,并做了优化(少量数据用插入排序优于快速排序的),效率很高,一般的排序都选择用它;但他是非稳定排序。

b).合并排序。效率比快排差(时间负责度o(nlgn),空间复杂度o(n)),一般较少用于排序;他是稳定排序。

c)堆排序。o(nlgn); 非稳定排序。

d)冒泡、插入 排序。 o(n^2); 稳定排序。

e)选择排序。 o(n^2): 非稳定排序。

这里说了好多废话。。。

4)给你写个排序怎么样。你要就说,我就去写,不要就不写了。你的冒泡排序效率很低的。。。

一般都是先排序再渲染,可以是服务器端直接输出排序结果直接渲染,也可以获取数据之后排序完再渲染。

如果是渲染完再排序那么页面会发生”闪现“,严重点会出现页面短暂混乱,如果列表很长那么页面将”自己动起来“,很吓人的。比起页面”自己动起来“宁愿让它短暂的"转圈圈"一点点加载。