根据数字键对对象数组进行Javascript排序

5

我有一个对象数组,看起来像这样:

var data = [
 {
   title: 'Shirt',
   position: 3
 },
 {
   title: 'Ball',
   position: 1,
 }
]

我该如何对其进行排序以在类似以下的for loop中使用。
for(var i in data) {

}

我尝试了:

for(var i in data | orderBy:'position')

但这是Angular的代码,所以在普通JavaScript中不起作用。

我想,在循环之前对数组进行排序或向循环添加过滤器,这两种方法都可以,不确定哪种方法更好。


2
这篇文章解决了您的问题吗? - andriusain
2
你为什么想要使用 for in 循环呢?为什么不使用 sort 呢?它的抽象排序规则比你自己编写的排序函数要容易实现得多。 - CertainPerformance
4个回答

21

但是这是Angular,所以普通的JavaScript不起作用。

你可以简单地使用JavaScript的sort函数。它在Angular(TypeScript)中也能起作用。

注意: 当对数字进行排序时,你可以简单地使用紧凑比较法:

myArray.sort((n1,n2) => n1 - n2);

var data = [
 {
   title: 'Shirt',
   position: 3
 },
 {
   title: 'Ball',
   position: 1,
 }
];

 data.sort(function(a, b) { 
return a.position- b.position;
})

console.log(data);


3

使用 Array.prototype.sort (文档) 并按照您的需要传递比较函数:

var data = [
 {
   title: 'Shirt',
   position: 3
 },
 {
   title: 'Ball',
   position: 1,
 },
 // add for actually seeing the correct result
 {
   title: 'Cake',
   position: 2,
 }
];

function compareFunction(a,b){
  if(a.position > b.position)
    return 1;
  else
    return -1;
}

data.sort(compareFunction);

console.log(data);


0
这是一个冒泡排序的方法:
var data = [
    {
      title: 'Shirt',
      position: 3
    },
    {
      title: 'Ball',
      position: 1,
    },
    {title: "h",
position:0}
   ]
  

   for(let i=0;i<data.length;i++)
   for(let j=0;j<data.length - 1;j++){
    if(data[j].position > data[j + 1].position){
    var first = data[j]
    var second = data[j + 1]
    data[j] = second;
    data[j + 1] = first;
    
    }
    
    }


console.log(data)
   

0

您可以使用arr.sort([compareFunction])。

如果compareFunction(a, b)小于0,则将a排序到低于b的索引,即a排在前面。

如果compareFunction(a, b)返回0,则将a和b保持不变,但相对于所有不同的元素进行排序。

如果compareFunction(a, b)大于0,则将b排序到低于a的索引,即b排在前面。

当给定特定的元素对a和b作为其两个参数时,compareFunction(a, b)必须始终返回相同的值。如果返回不一致的结果,则排序顺序是未定义的。

例如 -

     myarray.sort((a,b) => {
       if(a.position > b.position)
        return 1
        else
        return -1
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接