【问题标题】:sort array or json on basis of a number/object in javascript根据javascript中的数字/对象对数组或json进行排序
【发布时间】:2016-09-27 05:29:14
【问题描述】:

我在 JSON 中排序时遇到问题。我有一个可以重新排序的列表,并且可以保存重新排序,因此下次用户来时,他/她可以按照他的排列方式查看重新排序的列表。图片如下。 现在它将订单保存在对象中,当他将其检索回来时,JSON 将以这种方式出现。,您可以看到对象 ResourceSortedOrder 是指示将出现在哪个位置项目上的订单,它将用于检查项目只有其余的会有空。现在在它的基础上我对数组/JSON进行排序,javascript如下:

for (var i = 0; i < lst.length; i++) {
                  if (lst[i].ResourceSortedOrder != null) {
                   var temp = lst[i];
                  lst.splice(i, 1);
                  lst.splice(temp.ResourceSortedOrder, 0, temp);
                  lst.join();
                }


            }

它正在排序,但必须放置在第 5 位的第一个元素被放置在第 4 位,因为它上面的数据 100srvc 资源在 JSON 中低于它。所以我得到了如下图所示的结果。 而不是我的初始图像。请帮助

字符串中的 JSON:

"[{"__type":"BusinessLayer.DTOApptResource","ResourceInClinicID":null,"ResourceInClinicName":null,"ResourceID":"d322a490-60ba-4739-a4ce-7d1de52f1789","ResourceName":"Dr. Maity","ResourceType":"Staff","ResourceRoster":[],"ResourceNotAvailableFrom":"0001-01-01T00:00:00.000Z","ResourceNotAvailableTo":"0001-01-01T00:00:00.000Z","ResourceSortedOrder":5,"ResourceKey":"Staff:d322a490-60ba-4739-a4ce-7d1de52f1789"},{"__type":"BusinessLayer.DTOApptResource","ResourceInClinicID":null,"ResourceInClinicName":null,"ResourceID":"e7217073-0763-4c42-8da0-7b4ce81f886a","ResourceName":"Dr. Shome","ResourceType":"Staff","ResourceRoster":[],"ResourceNotAvailableFrom":"0001-01-01T00:00:00.000Z","ResourceNotAvailableTo":"0001-01-01T00:00:00.000Z","ResourceSortedOrder":1,"ResourceKey":"Staff:e7217073-0763-4c42-8da0-7b4ce81f886a"},{"__type":"BusinessLayer.DTOApptResource","ResourceInClinicID":null,"ResourceInClinicName":null,"ResourceID":"670a9ec7-7502-4710-91d3-1c0dbe3023be","ResourceName":"TEST NEW DSHOME","ResourceType":"Staff","ResourceRoster":[],"ResourceNotAvailableFrom":"0001-01-01T00:00:00.000Z","ResourceNotAvailableTo":"0001-01-01T00:00:00.000Z","ResourceSortedOrder":2,"ResourceKey":"Staff:670a9ec7-7502-4710-91d3-1c0dbe3023be"},{"__type":"BusinessLayer.DTOApptResource","ResourceInClinicID":null,"ResourceInClinicName":null,"ResourceID":null,"ResourceName":null,"ResourceType":null,"ResourceRoster":null,"ResourceNotAvailableFrom":"0001-01-01T00:00:00.000Z","ResourceNotAvailableTo":"0001-01-01T00:00:00.000Z","ResourceSortedOrder":null,"ResourceKey":":"},{"__type":"BusinessLayer.DTOApptResource","ResourceInClinicID":null,"ResourceInClinicName":null,"ResourceID":"","ResourceName":"Hair care","ResourceType":"NonStaff","ResourceRoster":null,"ResourceNotAvailableFrom":"0001-01-01T00:00:00.000Z","ResourceNotAvailableTo":"0001-01-01T00:00:00.000Z","ResourceSortedOrder":null,"ResourceKey":"NonStaff:Hair care"},{"__type":"BusinessLayer.DTOApptResource","ResourceInClinicID":null,"ResourceInClinicName":null,"ResourceID":"","ResourceName":"New appointment","ResourceType":"NonStaff","ResourceRoster":null,"ResourceNotAvailableFrom":"0001-01-01T00:00:00.000Z","ResourceNotAvailableTo":"0001-01-01T00:00:00.000Z","ResourceSortedOrder":0,"ResourceKey":"NonStaff:New appointment"},{"__type":"BusinessLayer.DTOApptResource","ResourceInClinicID":null,"ResourceInClinicName":null,"ResourceID":"","ResourceName":"100 SRVC","ResourceType":"NonStaff","ResourceRoster":null,"ResourceNotAvailableFrom":"0001-01-01T00:00:00.000Z","ResourceNotAvailableTo":"0001-01-01T00:00:00.000Z","ResourceSortedOrder":null,"ResourceKey":"NonStaff:100 SRVC"},{"__type":"BusinessLayer.DTOApptResource","ResourceInClinicID":null,"ResourceInClinicName":null,"ResourceID":"","ResourceName":"Dressing","ResourceType":"NonStaff","ResourceRoster":null,"ResourceNotAvailableFrom":"0001-01-01T00:00:00.000Z","ResourceNotAvailableTo":"0001-01-01T00:00:00.000Z","ResourceSortedOrder":null,"ResourceKey":"NonStaff:Dressing"},{"__type":"BusinessLayer.DTOApptResource","ResourceInClinicID":null,"ResourceInClinicName":null,"ResourceID":"","ResourceName":"Hair care","ResourceType":"NonStaff","ResourceRoster":null,"ResourceNotAvailableFrom":"0001-01-01T00:00:00.000Z","ResourceNotAvailableTo":"0001-01-01T00:00:00.000Z","ResourceSortedOrder":null,"ResourceKey":"NonStaff:Hair care"},{"__type":"BusinessLayer.DTOApptResource","ResourceInClinicID":null,"ResourceInClinicName":null,"ResourceID":"","ResourceName":"smoothening","ResourceType":"NonStaff","ResourceRoster":null,"ResourceNotAvailableFrom":"0001-01-01T00:00:00.000Z","ResourceNotAvailableTo":"0001-01-01T00:00:00.000Z","ResourceSortedOrder":null,"ResourceKey":"NonStaff:smoothening"}]"

【问题讨论】:

  • 为什么不用sort函数来做呢?
  • 我不知道怎么用 我试过了但是不知道怎么用
  • 我已经发布了 json 的图片以及你想要的方式,告诉我会发布它
  • 已添加
  • 是的,因为我只是在设置,有什么方法可以设置它,因为在列表中检查的具有排序值的数据为空

标签: javascript arrays json sorting


【解决方案1】:

result 是结果。
sort 函数未使用。

var checked = [];
var unchecked = [];

lst.map(function(item){
    if(item.ResourceSortedOrder !== null){
        checked.push(item);
    }else{
        unchecked.push(item);
    }
});

var result = [];

checked.map(function(item){
    result[item.ResourceSortedOrder] = item;
});

var index = 0;

unchecked.map(function(item){   
    while(result[index]){
        index ++;
    }
    result[index] = item;   
});

【讨论】:

    【解决方案2】:

    使用下面的代码代替 for 循环对“lst”进行排序。

     lst.sort(function (a, b) {
        var a1 = a.ResourceSortedOrder, b1 = b.ResourceSortedOrder;
        a1 = a1 == null ? 99999 : a1;
        b1 = b1 == null ? 99999 : b1;
    
    
        return a1 - b1 ;
    });
    

    【讨论】:

    • 不工作的数据 Dr.Maity 现在移动到两个地方
    • 我已经用你的样本数据测试了结果。 Matty 博士有 ResourceSortedOrder: 5. 所以它显示在第 4 位。在 0,1,2,5 等等.....
    • 是的,但它应该显示在第五个位置,并且根据您的代码显示在第三个位置,因为列表从 0 开始,感谢您的帮助,如果您有任何解决方案,请帮助我
    • 你有没有默认的排序顺序。假设没有检查任何项目,那么列表将如何重新排列?
    • 是的,默认情况下它是按某种顺序出现的,但当时重新排序的对象什么都不是 0 它只在客户端获得价值
    【解决方案3】:

    此代码会将项目放置在“ResourceSortedOrder”中指定的列表中。

    var sortedList = [];
    for (var i = 0; i < lst.length; i++) {
        var count = lst.length - sortedList.length;
        var item = null;
        for (var j = 0; j < count; j++) {
            if (lst[j].ResourceSortedOrder == i) {
                item = lst[j];
                break;
            }
        }
        if (item != null) {
            sortedList.push(item);
        }
        else {
            sortedList.push(lst[i]);
        }
    }
    lst = sortedList;
    

    【讨论】:

    • 非常感谢好友的帮助,但它不起作用问题是因为只有空值...顺便说一句谢谢
    • 最好的方法是保存列表中每个项目的顺序。这是一团糟,因为项目的顺序有空的“ResourceSortedOrder”是未指定的
    • 同样在示例 json 列表中,有些项目的所有值都为 null,例如 ResourceName、ResourceType、ResourceID
    猜你喜欢
    • 2018-12-27
    • 2020-12-15
    • 1970-01-01
    • 2018-11-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 2020-04-21
    相关资源
    最近更新 更多