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

问题描述 投票:0回答:4

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

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

我怎样才能将它排序以便在像这样的

for loop
中使用。

for(var i in data) {

}

我尝试过:

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

但是这是有角度的,所以普通的 Javascript 不起作用。

我认为他们必须有某种方法在循环之前对数组进行排序,或者在循环中添加过滤器,不确定哪种方法是最好的方法。

javascript arrays sorting
4个回答
21
投票

但是这是有角度的,所以普通的 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
(doc) 并根据需要传递比较函数:

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
投票

您可以使用 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 })
    

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)

© www.soinside.com 2019 - 2024. All rights reserved.