2011-06-16 66 views
2

我有一个对象数组,我想知道是否可以通过对象中的属性对数组进行排序?这里是我的意思是一个样本:有没有一种方法来基于javascript中的对象中的内容对对象数组进行排序?

for (var i = 0; i < response.data.length; i++) { 
    person[i] = { 
     "name":response.data[i].name, 
     "phone":response.data[i].phone 
    }; 
    person[i].name.sort(); 
} 

我想按对象名称排序数组。

+0

'person [i] .name.sort()'只有在'response.data [i] .name'是一个数组时才会起作用。然后它只会分类一个人的名字。看看http://stackoverflow.com/search?q=javascript+sort+array+of+objects – 2011-06-16 12:24:03

+0

[排序对象数组]的可能重复(http://stackoverflow.com/questions/5876424/sort-对象数组) – 2011-06-16 12:26:57

回答

8
person.sort(function(a, b) { 
    if (a.name < b.name) return -1; 
    if (a.name > b.name) return 1; 
    return 0; 
}); 

sort需要一个比较器功能作为一个可选参数。

0

当然。数组对象有一个排序函数,允许您传入函数以确定如何比较对象。

//Passes in A and B, which are the objects in your array. 
function sortName(a, b) 
{ 
    return a.name <= b.name ? -1 : 1 
      //return integer 
      //negative number a is less than b 
      //positive number b is less than a 
      //zero a and b are equal 
      //(My function doesn't ever return zero) 
} 

person.sort(sortName); 
+0

虽然它应该能够工作,但是对于那一天我的挑剔是你的注释与你的代码不匹配,因为//零a和b是相等的将永远不会实际发生。 – Wiseguy 2011-06-16 12:35:14

+0

这是关于比较器功能需求的更多指导。教一个男人给鱼打一个东西。我将编辑以澄清代码。 – MillsJROSS 2011-06-16 12:38:01

+0

如果这是需要的,那么为什么不这样做呢? :-)既然你在这里排序,它应该仍然正常工作。但是,如果您使用相同的比较回调来执行其他操作,则该操作可能会产生不正确的结果,因为回调没有达到预期的效果。 – Wiseguy 2011-06-16 12:40:39

相关问题