【问题标题】:Sorting array in javascript [duplicate]在javascript中排序数组[重复]
【发布时间】:2014-10-31 13:09:40
【问题描述】:

第一个数组

 [
 {
  type:"one",
  ID : "1",
  isValid:"true"
 },
 {
  type:"two",
  ID : "2",
  isValid:"false"
 },
 {
  type:"two",
  ID : "3",
  isValid:"true"
 }
]

我有一个像上面那样的对象数组。我必须拿走所有有效的物品。通过迭代它们,我将得到一个仅包含有效对象的对象数组。这部分我已经成功完成了。

 var valid_types = $.grep(firstArray, function(v)
  { 
         return v.isValid=== "true";
  });

 ["two","five","three","one","four"]

我有另一个指定排序顺序的数组。如何根据类型对结果数组进行排序?我有点困惑。有什么建议?我必须根据类型对 valid_types 进行排序

疑问: 结果数组可以具有相同类型的有效对象,并且它可能不具有排序顺序中指定的所有类型。如何处理?

所需的数组:

[
  {
  type:"two",
  ID : "3",
  isValid:"true"
  },
  {
  type:"one",
  ID : "1",
  isValid:"true"
  }
]

【问题讨论】:

  • 请告诉我投反对票的原因
  • 我没有投反对票,但我怀疑投反对票的人(应该在评论中解释原因)担心您的问题中缺少代码。
  • @Pointy 谢谢。我不知道如何尽快对其进行排序。这就是我在这里发帖的原因。我已经完成了我的一半。你还期待什么代码?
  • 或者可能是因为您的对象无效
  • 期望的结果数组是什么?

标签: javascript jquery arrays sorting


【解决方案1】:

您可以使用 .sort() 函数通过自定义函数对数组进行排序。

var order =  ["two","five","three","one","four"];
var data = [{
        type:"one",
        ID : "1",
        isValid:"true"
    },
    {
        type:"two",
        ID : "2",
        isValid:"false"
    },
    {
        type:"two",
        ID : "3",
        isValid:"true"
    }
];

data.sort(function(a, b) {
    return order.indexOf(a.type) - order.indexOf(b.type);
});
//use your sorted array

【讨论】:

    【解决方案2】:

    我做了一个解决方案,但是这样搞不太好。

    首先,我使用类型的 int 值向每个对象添加一个属性。之后,您可以按该属性对它们进行排序。

    var arr = [
     {
      type:"two",
      ID : "2",
      isValid:"false"
     },
     {
      type:"one",
      ID : "1",
      isValid:"true"
     },
     {
      type:"two",
      ID : "3",
      isValid:"true"
     }
    ];
    
    for(var i = 0; i < arr.length; i++){
      switch(arr[i].type){
        case "one":
          arr[i].typeNum = 1;
          break;
        case "two":
          arr[i].typeNum = 2;
          break;
      }
    }
    
    arr.sort(function(a, b){
     return a.typeNum-b.typeNum
    });
    
    console.log(arr);

    【讨论】:

    • 嗨,请看我的编辑
    • @user3801433 对不起,我想我有你想要的。它们现在按类型排序。
    • 我不应该在他的数组中添加任何数字。这就是我发布安德烈亚斯的原因
    • 好吧,你必须使用@Benjamin P 的其他解决方案。
    猜你喜欢
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    相关资源
    最近更新 更多