2015-04-06 63 views
2

下面是给出的工作代码作为对实现对象排序问题的答案,它工作得很好。由于我是JavaScript新手,我不明白返回类型的确切含义。任何人都可以解释吗?返回类型1,-1和0在排序函数中做什么?

var people= [ 
    { 
     "f_name": "john", 
     "l_name": "doe", 
     "sequence": "0", 
     "title" : "president", 
     "url" : "google.com", 
     "color" : "333333", 
    } 
    // etc 
]; 

function sortResults(prop, asc) { 
    people = people.sort(function(a, b) { 
     if (asc) return (a[prop] > b[prop]) ? 1 : ((a[prop] < b[prop]) ? -1 : 0); 
     else return (b[prop] > a[prop]) ? 1 : ((b[prop] < a[prop]) ? -1 : 0); 
    }); 
    showResults(); 
} 

参数“道具”是propertyName的基础上排序需要做的,和ASC是一个boolean类型的排序在递增顺序,如果真或倒序如果假的。

+2

*“由于我是jquery的新手,我不明白返回类型的确切含义。”*。它与jQuery无关。这是纯javacsript基础知识。检查'Array.prototype.sort'方法https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort – dfsq 2015-04-06 08:17:12

+3

提示:如果它不以'$('或'jQuery(',它*可能*不是jQuery。 – Kobi 2015-04-06 08:18:47

+0

@Kobi除非..'var itsNotJQuery = $ .noConflict()':) – dfsq 2015-04-06 08:20:10

回答

4

这是Array.sortjQuery无关。请记住jQuery是另一个在javascript中开发的库。

The MDN explains this already:

如果compareFunction被提供时,所述阵列元件根据比较函数的返回值排序 。如果 两个元件被比较,然后a和b是:

  1. 如果compareFunction(a, b)小于0,排序a到较低的指数大于 b,即a至上。

  2. 如果compareFunction(a, b)回报0,离开ab不变,相对于彼此,但对于所有 不同的元素进行排序。注意:ECMAscript标准不保证 这种行为,因此并非所有浏览器(例如,追溯至2003年的Mozilla版本 )都尊重这一点。

  3. 如果compareFunction(a, b) 大于0,则将b分类为低于a的索引。给定的一对特定的 元件ab作为它的两个参数的时

  4. compareFunction(a, b)必须总是返回相同的值。如果不一致的结果是 然后返回排序顺序undefined

这不是强制性的,只-11返回。

+0

非常感谢,这真的很有用:) :) – 2015-04-06 10:17:41

+0

@AbhijithKishore很高兴它是:) – 2015-04-06 10:41:00

0

那么,它返回2个元素应该相对于另一个排序。

如果它是-1,那么它意味着元素应该交换,因为它们是相反的顺序。因此,如果它是1,这意味着元素的顺序是正确的。

如果它是0,那么它意味着元素是相等的或者具有相同的位置,所以它们的顺序无关紧要。