Javascript对象排序有时只能起作用

时间:2017-09-11 03:26:50

标签: javascript jquery ajax sorting object

我的ajax调用返回一个有时可排序的javascript对象。有时候因为它有时会有效,有时则不然。我不知道为什么。如果它不起作用,我会得到这个。

  

未捕获的TypeError:cars.sort不是函数

我已将return dataType指定为始终为json。无论排序是否有效,console.log(typeof cars) 始终都会返回object。 由于这是内部成功声明,因此可以安全地假设每次都加载汽车,因此它不是异步问题。我读了这个answer并决定尝试[].sort.call(cars).sort(sort_timestamp),但它不起作用。我真的迷失了为什么cars.sort有时而且并非总是有效。 sort_timestamp是一个按汽车对象的时间戳字段排序的函数。

$.ajax({
    url: url, 
    dataType: 'json',
    success: function (cars) {
        console.log(typeof cars); // prints the word 'object'
        cars.sort(sort_timestamp);

        // I tried these as well. They also only work sometimes
        // cars.sort((a, b) => a.timestamp - b.timestamp);
        // [].sort.call(cars).sort(sort_timestamp);
    }
});

1 个答案:

答案 0 :(得分:0)

sort是一种Array []而不是object {}的方法。

要解决您的问题,您有两个选择:

  • 修复后端服务以确保始终返回您想要排序的Array

  • Object转换为Array

要安全地检查变量是否为Object,您无法使用typeof,因为它会为object类型返回Array and Object

使用:Object.prototype.toString.call( THEVARIABLEYOUWANTTOBECHECKED )

$.ajax({
    url: url, 
    dataType: 'json',
    success: function (cars) {
      // check if cars is an object
      if (Object.prototype.toString.call(cars) == "[object Object]")
      {
        var result = [];
        var keys   = Object.keys(cars);
        // then convert to an array;
        for (var i = 0; i < keys.length; i++)
        {
          var key = keys[i];
          result.push(cars[key]);
        }

        cars = result;

        // then sort
        cars.sort();
      }
    }
});

希望有所帮助