我的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);
}
});
答案 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();
}
}
});
希望有所帮助