2015-07-20 91 views
4

我的问题: 我有一个对象的数组,我通过一个对象键对ASC DESC进行排序,之后我需要对将按照对象数组排序方式排序的字符串数组进行排序。 例如:如何对一个数组和另一个数组进行排序?

arrayOfObjects = [{name:"john",nuber:6,food:"pizza"}, 
       {name:"david",nuber:2,food:"gulash"}, 
       {name:"margaret",nuber:7,food:"gugi barries"}] 

arrayOfStrings = ['r1','r2','r3'] 

所以在arrayOfObjects每个对象具有它自己的字符串。所以说,约翰有r1,他们都是第一次索引,当我按数字排序约翰第二,并且我希望他的数字也第二(以及大卫和玛格丽特数字)

我需要重新-arrange的arrayOfStrings以同样的方式(我不关心它是什么排序)的arrayOfObjects进行了排序

我的排序功能:

dataArray.sort(dynamicSort(sortBy)); 
function dynamicSort(property) { 
    var sortOrder = 1; 
    if(property[0] === "-") { 
     sortOrder = -1; 
     property = property.substr(1); 
    } 
    return function (a,b) { 
     if(direction=='asc'){ 
      var c = b; 
      b=a; 
      a=c; 
     } 
     var result = (b[property] < a[property]) ? -1 : (b[property]> a[property]) ? 1 : 0; 
     return result * sortOrder; 
    } 
} 
+1

您可以为要排序的对象添加一个属性,例如'{name:“john”,r:'r1'...',然后在对数组进行排序时检索这些值。 – Hacketo

回答

2

我建议你在格式[[object, string], ...]压缩列表,然后根据排序到元组的第一个元素。之后您可以解压缩列表。

+0

这是一个好主意,我有一个类似的想法,只是将每个字符串添加到它的原始对象,在key:string处并从那里读取它。 虽然我想看看是否有办法我可以'记住排序改变' – nadiTime

+0

@nadiTime不,我很确定没有,这是不实际的。我的意思是说你最多只会做两次分拣工作*这不是你想要的。只需一次完成 - 无论哪种方式(你的或我的),这只是一个问题,它是否有意义的字符串是否是对象的一部分。 – corazza

+0

你绝对正确,我不想再次对数组进行排序。谢谢 – nadiTime

相关问题