如何使用jquery或javascript对对象数组进行排序[重复]

Posted

技术标签:

【中文标题】如何使用jquery或javascript对对象数组进行排序[重复]【英文标题】:How to sort an array of objects with jquery or javascript [duplicate] 【发布时间】:2011-07-27 02:38:18 【问题描述】:

我有一个对象数组:

var array = [(id, name, value),(id, name, value)]; //and so on

如何让数组按属性名称(array[i][1])的升序排序?

我试过这样做:array[i][1].sort(),但这不起作用。

请帮帮我!

编辑:数组可以包含两个以上的对象!它可以包含数百个。

编辑: 为什么这个问题在“重复”问题前 2 年被问到,却被标记为重复?

【问题讨论】:

你有二维数组还是对象数组?对我来说,上面看起来更像是一个对象数组。 id, name, value 语法无效 @Sime 语法对不起,我当时不记得了。 @Chris 是的,当我想到它时,它实际上是一个对象数组。抱歉,我在这里同时处理多项任务,所以有时我会有点困惑。 关于您关于重复标记的问题:另一个问题是在 2009 年提出的,请参阅***.com/posts/979256/revisions。 【参考方案1】:
//objects
var array = [id:'12', name:'Smith', value:1,id:'13', name:'Jones', value:2];
array.sort(function(a, b)
    var a1= a.name.toLower(), b1= b.name.toLower();
    if(a1== b1) return 0;
    return a1> b1? 1: -1;
);

//arrays
var array =[ ['12', ,'Smith',1],['13', 'Jones',2]];
array.sort(function(a, b)
    var a1= a[1], b1= b[1];
    if(a1== b1) return 0;
    return a1> b1? 1: -1;
);

【讨论】:

救命稻草!有没有办法让元素动态化?所以' array.sort(function(a,b,element) var a1= a.element, b1= b.element; '等等...【参考方案2】:
data.sort(function(a,b) 

   return a.val - b.val;
);

【讨论】:

【参考方案3】:
var array = [[1, "grape", 42], [2, "fruit", 9]];

array.sort(function(a, b)

    // a and b will here be two objects from the array
    // thus a[1] and b[1] will equal the names

    // if they are equal, return 0 (no sorting)
    if (a[1] == b[1])  return 0; 
    if (a[1] > b[1])
    
        // if a should come after b, return 1
        return 1;
    
    else
    
        // if b should come after a, return -1
        return -1;
    
);

sort 函数接受一个额外的参数,一个接受两个参数的函数。此函数应返回-101,具体取决于排序中两个参数中的哪一个。 More info.

我还修复了您的多维数组中的语法错误。

【讨论】:

【参考方案4】:

sort method 包含一个可选参数以传递自定义比较函数。

假设你想要一个数组数组:

var arr = [[3, "Mike", 20],[5, "Alex", 15]];

function compareName(a, b)


  if (a[1] < b[1]) return -1;
  if (a[1] > b[1]) return 1;
  return 0;

arr.sort(compareName);

否则,如果你想要一个对象数组,你可以这样做:

function compareName(a, b)


  if (a.name < b.name) return -1;
  if (a.name > b.name) return 1;
  return 0;

【讨论】:

【参考方案5】:
//This will sort your array
function SortByName(a, b)
  var aName = a.name.toLowerCase();
  var bName = b.name.toLowerCase(); 
  return ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0));


array.sort(SortByName);

【讨论】:

正是我想要的,谢谢! 这在某些浏览器下会被破坏。我正在为一个项目使用 IE8,它不适用于这种情况。 @PaolodelMundo 我们有使用 IE 7/8/9 的用户。我们对这段代码没有任何问题。您能否提供有关您的代码的更多信息? 我能想到的唯一破坏它的是 a.name.toLowerCase()。我只是要使用 jQuery 选择器;我只对短数组进行排序。 @Jackson 在忽略大小写的情况下对数组进行排序。【参考方案6】:

好吧,您似乎创建了一个(几乎)javascript 对象数组,而不是创建一个真正的多维数组。尝试像这样定义你的数组 ->

var array = [ [id,name,value], [id,name,value] ]

希望对您有所帮助!

【讨论】:

以上是关于如何使用jquery或javascript对对象数组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 或 jQuery 更改数组内的对象的值?

如何在jquery或javascript中获得小数点后的精确两位数

如何使用 JQuery 或 Javascript 使用动态路径从 JSON 对象中删除

如何使用 JavaScript/jQuery 按数组或对象中的多个项目进行索引?

如何使用 Javascript 或 Jquery 将 JSON 对象包装在数组中?

JQuery 插件,Javascript - 如何仅为 JQuery 插件全局变量或 json 对象创建并在函数级别更改此(变量、对象)