【问题标题】:Javascript sort an array of objects based on numeric keyJavascript根据数字键对对象数组进行排序
【发布时间】:2018-12-27 00:23:23
【问题描述】:

我有一个如下所示的对象数组:

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 它不起作用。

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

【问题讨论】:

  • 这篇文章能回答你的问题吗? stackoverflow.com/questions/2466356/…
  • 为什么要使用for in 循环?为什么不用sort,他的抽象排序规则比你自己自定义排序函数更容易实现?

标签: javascript


【解决方案1】:

但那是有角度的,所以普通的 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);

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 没有给出预期的结果
    • 什么意思?
    • 你的结果没有排序
    • @NullPointer 肯定是按position排序的
    • @gforce301-> 我的评论已经过去了 18 分钟,但他在 5 分钟前更正了。
    【解决方案3】:

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

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

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

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

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

    例如-

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

    【讨论】:

      【解决方案4】:

      这是一种冒泡排序方法:

      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)
         
      

      【讨论】:

        猜你喜欢
        • 2021-10-14
        • 2017-09-29
        • 1970-01-01
        • 2016-12-23
        • 1970-01-01
        • 2018-11-01
        • 2011-04-05
        • 2021-11-20
        • 1970-01-01
        相关资源
        最近更新 更多