`
songkang666
  • 浏览: 103065 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

javascript array 排序

 
阅读更多
有这么一个数组:
boxes = [ { id: 1, name: 'box034' },
  { id: 2, name: 'box001' },
  { id: 3, name: 'box036' },
  { id: 4, name: 'box024' },
  { id: 5, name: 'box028' },
  { id: 6, name: 'box019' } ]


boxes.sort(function(a, b) {
    if(a.name > b.name)
        return 1
    else
        return 0
})

进行排序,输出结果:
[ { id: 2, name: 'box001' },
  { id: 6, name: 'box019' },
  { id: 4, name: 'box024' },
  { id: 5, name: 'box028' },
  { id: 1, name: 'box034' },
  { id: 3, name: 'box036' } ]

看似没什么问题,可以正常排序。

但是,当
boxes = [ { id: 1, name: 'box034' },
  { id: 2, name: 'box001' },
  { id: 3, name: 'box036' },
  { id: 4, name: 'box024' },
  { id: 5, name: 'box028' },
  { id: 6, name: 'box019' },
  { id: 7, name: 'box023' },
  { id: 8, name: 'box045' },
  { id: 9, name: 'box035' },
  { id: 10, name: 'box011' },
  { id: 11, name: 'box014' } ]

时,排序结果:
[ { id: 6, name: 'box019' },
  { id: 11, name: 'box014' },
  { id: 10, name: 'box011' },
  { id: 2, name: 'box001' },
  { id: 7, name: 'box023' },
  { id: 4, name: 'box024' },
  { id: 5, name: 'box028' },
  { id: 1, name: 'box034' },
  { id: 9, name: 'box035' },
  { id: 3, name: 'box036' },
  { id: 8, name: 'box045' } ]

明显为乱序,呃,,有点意思,像这种直接用 “>”、"<"、"="号来比较两个字符串,array.sort函数能正确处理的元素个数不能超过10个,原因未明。
解决方法,利用string.localeCompare函数代替 “>”、"<"、"=" 的比较方法,即:
boxes.sort(function(a, b) {
    return a.name.localeCompare(b.name)
})


W3school中对字符串的 "<" 、">" 和 localeCompare 有如下说明:

把 < 和 > 运算符应用到字符串时,它们只用字符的 Unicode 编码比较字符串,而不考虑当地的排序规则。以这种方法生成的顺序不一定是正确的。例如,在西班牙语中,其中字符 “ch” 通常作为出现在字母 “c” 和 “d” 之间的字符来排序。
localeCompare() 方法提供的比较字符串的方法,考虑了默认的本地排序规则。

more:
JavaScript localeCompare() 方法
分享到:
评论
1 楼 nonocast 2013-07-15  
给你一个思路,
npm install underscore

_ = require 'underscore'

boxes = [ { id: 1, name: 'box034' },
          { id: 2, name: 'box001' },
          { id: 3, name: 'box036' },
          { id: 4, name: 'box024' },
          { id: 5, name: 'box028' },
          { id: 6, name: 'box019' },
          { id: 7, name: 'box023' },
          { id: 8, name: 'box045' },
          { id: 9, name: 'box035' },
          { id: 10, name: 'box011' },
          { id: 11, name: 'box014' } ]

console.log _.sortBy boxes, 'name'


http://underscorejs.org/#sortBy

相关推荐

    javascript 写的给表单按列排序的东东,用过就知道什么是爽了

    step1:导入css,js,images到你的project step2:在要排序的页面正确引入 step3:给要排序的table加上id="xxx" ...&lt;script type="text/javascript"&gt; initTableWidget('xxx',0,0,Array('S','S','S',0),false); &lt;/script&gt;

    数组Array的排序sort方法

    JavaScript中的Array对象有自己的排序方法sort(),对数组中的数据项进行排序,但是有时候排序结果不尽如人意,比如 var arr = [12, 1, 2, 21, 3]; arr.sort(); alert&#40;arr&#41;; 得到的结果为 1,12,2,21,3 这是...

    javascript 节点排序 2

    var sortBy = function(nodes){ var result = [], array = [], n = nodes.length, i = n, node; while(node = nodes[–n]){ (array[n] = new Number(~~node.sourceIndex))._ = node; } array.sort(fu

    javascript数组排序汇总

    javascript数组排序汇总 //排序算法 [removed] = function(){ var array = [0,1,2,44,4, 324,5,65,6,6, 34,4,5,6,2, 43,5,6,62,43, 5,1,4,51,56, 76,7,7,2,1, 45,4,6,7,8]; //var array = [4,2,5,1,0,3]; ...

    数据排序谁最快(javascript中的Array.prototype.sort PK 快速排序)

    但是让我感到意外的是,下面有个网友回复说,javascript中的Array本身的sort方法才是最快的,比快速排序算法都快,当时看到了很是郁闷,因为当时花了好长时间在排序算法上,居然忘记了Array本身的sort方法 不过...

    基于JavaScript实现Json数据根据某个字段进行排序

    一.首先给大家介绍js中内置的 sort() 方法 此方法默认是按字母顺序对数组中的元素进行排序的,说得更精确点,是按照字符编码的顺序进行排序。 看如下例子: ... * @param array 要排序的json数组对象 * @param

    JavaScript对JSON数组简单排序操作示例

    本文实例讲述了JavaScript对JSON数组简单排序操作。分享给大家供大家参考,具体如下: 我们经常回使用到数据格式 var arr=[{num:1},{num:3},{num:2}] 如何根据数组里面的JSON数据的某个key进行排序 javascript有一...

    JavaScript实验报告.docx

    动手操作: 数组的升序与降序排列练习 1 升序排列代码 &lt;html&gt; &lt;head&gt; 数组数字大小排序&lt;/title&gt; &lt;/head&gt; &lt;body&gt; 让数组按照升序降序排列&lt;/p&gt; 这里写个数组 var array=[89,28,49,654,6758,5768];&lt;/p&gt; 升序输出:&lt;/p&gt;...

    javascript排序函数实现数字排序

    javascript排序函数实现数字排序 [removed] function SortNumber(obj,func) //定义通用排序函数 { //参数验证,如果第一个参数不是数组或第二个参数不是函数则抛出异常 if(!(obj instanceof Array) || !(func ...

    前端开源库-sorted-array

    前端开源库-sorted-array排序数组,用JavaScript实现John von Neumann的排序数组。实现插入排序和二进制搜索以快速插入和删除。

    JavaScript之排序函数_动力节点Java学院整理

    排序算法 排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心...JavaScript的Array的sort()方法就是用于排序的,但是排序结果可能让你大吃一惊: // 看上去正常的结果: ['Google', 'Apple',

    javascript 数组排序函数sort和reverse使用介绍

    reverse方法将一个Array对象中的元素位置进行反转,sort方法返回一个元素已经进行了排序的 Array 对象,下面为大家介绍下

    JavaScript常用的数组排序方法.md

    JavaScript常用数组排序方法,冒泡排序和sort()方法的使用

    JavaScript中数组Array.sort()排序方法详解

    本篇文章主要介绍了JavaScript中数组Array.sort()的排序方法。具有很好的参考价值,下面跟着小编一起来看下吧

    JavaScript中用sort()方法对数组元素进行排序的操作

    JavaScript数组sort()方法排序数组的元素。 语法 array.sort( compareFunction ); 下面是参数的详细信息: compareFunction : 指定一个函数,定义排序次序。如果省略,数组字典顺序排序。 返回值: 返回一个排序的...

    JavaScript自定义数组排序方法

    本文实例讲述了JavaScript自定义数组排序方法。分享给大家供大家参考。具体分析如下: Array中有自带的排序功能,这个使用起来比较方便,我们有一点必须清楚,就是排序的依据,如果sort不传入参数的话,那就是按照...

    javascript Array数组对象的扩展函数代码

    我们经常给 String,Function,Array 的原型加上自定义的扩展函数,比如去除字符串空格,数组排序等

    javascript 数组排序函数

    sort 方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。 如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一: 负值,如果所传递的第一个参数比第二个参数小。 零,...

    01 JavaScript基本语法.ppt

    目的: 如何将 JavaScript 嵌入到 HTML 中 网页中嵌入脚本有两种方式:使用标签或外部 *. js文件 理解变量、数据类型和运算符 JavaScript 中声明变量:var 变量名 ...Array对象常用的属性是length,排序方法:sort

Global site tag (gtag.js) - Google Analytics