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

时间:2018-07-19 01:04:14

标签: javascript

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

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无法正常工作。

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

4 个答案:

答案 0 :(得分:8)

  

但这是有角度的,因此普通的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);

答案 1 :(得分:0)

使用Array.prototype.sortdoc)并根据需要传递比较函数:

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);

答案 2 :(得分: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
})

答案 3 :(得分: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)