2015-10-16 36 views
1

我已经阅读了很多关于自定义排序的内容,大多数似乎都使用大于或小于运算符来确定是否返回一个对象或另一个对象。基于2个属性的排序功能

但是,我的情况有点不同。这里是我的数组:

var myStuff = [{name:"one",direction:"receiving"},{name:"two",direction:"sending"},{name:"one",direction:"sending"},{name:"two",direction:"receiving"}]; 

我需要的是有数组结束混为一谈这样的(名字一和二(接收),然后一和二(发送)):

var myStuff = [{name:"one",direction:"receiving"},{name:"two",direction:"receiving"},{name:"one",direction:"sending"},{name:"two",direction:"sending"}]; 

我已经把这种做法的方式放在一起,但是有更优雅的东西吗?就像一个不错的自定义JavaScript排序函数。

  var temp = myStuff.split(","); 

      $.each(temp, function(key,value){ 
       if(value.name == "one" && value.direction == "receiving") 
        myStuff[0] = value; 
       if(value.name == "two" && value.direction == "receiving") 
        myStuff[1] = value; 
       if(value.name == "one" && value.direction == "sending") 
        myStuff[2] = value; 
       if(value.name == "two" && value.direction == "sending") 
        myStuff[3] = value; 
      }); 
+3

这不是一种排序方式,这是[] .map()的用例... – dandavis

回答

2

我不知道你为什么在做myStuff.split(',') ...这将无法在数组上工作。

你可以像这样排序自定义函数的数组:

myStuff.sort(function(a,b) { 
    return a.direction.localeCompare(b.direction) 
}) 

这将到位数组排序。另请参阅Array.sortString.localeCompare

+0

有关数组上的split()的好处。那只不过是我写作的潜在方法而已。 – fumeng