对对象数组

时间:2016-07-08 15:48:25

标签: javascript jquery

我有以下功能:

  function GeraHorario(inicio,fim,tempoConsulta)
  {
    var agenda = []
    var data = new Date(2016, 0, 1, inicio, 0, 0, 0)
    var horainicial = inicio
    while (data.getDate() == 1) {
      if(data.getHours() < fim)
      {
          var horario = data.toLocaleTimeString('pt-BR');
          data.setMinutes(data.getMinutes()+tempoConsulta);
          var d1 = horario.replace(/(.*)\D\d+/, '$1');
          agenda.push(d1);
      }else{break}
    }
    console.log(agenda)
    return agenda
  }

此函数生成此数组

["09:00", "09:10", "09:20", "09:30", "09:40", "09:50", "10:00", "10:10", "10:20", "10:30", "10:40", "10:50", "11:00", "11:10", "11:20", "11:30", "11:40", "11:50", "12:00", "12:10", "12:20", "12:30", "12:40", "12:50", "13:00", "13:10", "13:20", "13:30", "13:40", "13:50", "14:00", "14:10", "14:20", "14:30", "14:40", "14:50", "15:00", "15:10", "15:20", "15:30", "15:40", "15:50", "16:00", "16:10", "16:20", "16:30", "16:40", "16:50", "17:00", "17:10", "17:20", "17:30", "17:40", "17:50", "18:00", "18:10", "18:20", "18:30", "18:40", "18:50"]

我在数组中创建了一个地图,它看起来像这样。  这是地图中使用的功能

 function GroupHoras(array)
  {
    var result = array.reduce(function( map, hourStr ) {
        var hour = hourStr.charAt(0) + hourStr.charAt(1);
        if (!map.hasOwnProperty(hour)) map[hour] = [];
        map[hour].push(hourStr);
        return map;
    }, {});

    return result
  }

看起来像是在地图之后

Object {10: Array[6], 11: Array[6], 12: Array[6], 13: Array[6], 14: Array[6], 15: Array[6], 16: Array[6], 17: Array[6], 18: Array[6], 09: Array[6]}

然而,正如您所看到的,值09应该在开头,转到对象数组的末尾。我如何越来越多地订购这个主题?

3 个答案:

答案 0 :(得分:2)

您无法“订购”javascript对象的属性。

也许一个好的解决方法是按照您想要显示的顺序存储一个包含属性名称的数组,并将其用于排序目的:

 var order = ["09","10","11"]
 var obj = {"10":"ten","11":"Eleven", "09": "Nine"};
 for(var i=0;i<order.length;i++){
    var prop = order[i];
   console.log(prop,obj[prop]);
 }
 

答案 1 :(得分:0)

Javascript对象数组不是可排序对象。即使使用相同的数据集,每个浏览器也会以不同的顺序显示它们。

你可以做的是创建一个二维JS数组,第一个索引元素将是小时,第二个索引将是一维数组,我想,你保持那个小时的项目。

除了第二个函数之外,您还应该能够使用以下代码创建自己的排序函数并获取二维数组,而不是使用JS对象数组。

var arr = new Array();
for(var hour in map){
    var arr2 = new Array();
    arr2.push(hour, map[hour]);

    arr.push(arr2);
}

arr.sort();//After this you will have a sorted array

答案 2 :(得分:0)

Javascript不保证地图中的关键顺序。请参阅此答案以获取规范中的引用:Does JavaScript Guarantee Object Property Order?

但是有很多方法可以解决这个问题,第二个这个问题的答案显示了如何使用JSON.sringify()来确保正确排序:Sort JavaScript object by key