我有一些从服务器获取的 JSON 数据。在我的 JavaScript 中,我想对其进行一些排序。我认为 sort() 函数会做我想做的事。
但是,JavaScript 似乎在 JSON 数据到达时立即将其转换为 Object。如果我尝试使用 sort() 方法,我会收到很多错误(使用 Firebug 进行测试)。
我在网上看了一圈,似乎每个人都在说,一方面,JSON 对象已经是 JavaScript 数组,而且对象可以像数组一样对待。就像在 this question 上一样,在其中一个答案中,有人说“[Object object] 是您的数据——您可以像访问数组一样访问它。”
然而,这并不完全正确。 JavaScript 不允许我在对象上使用 sort()。而且由于默认假设它们都是相同的东西,因此似乎没有任何关于如何将 Object 转换为 Array 或强制 JavaScript 将其视为一个或类似的说明。
那么...如何让 JavaScript 让我将这些数据视为一个数组并对其进行排序()?
我的对象的控制台日志输出如下所示(我希望能够按“级别”中的值进行排序):
对象 JSON 数据
{
1: {
displayName: "Dude1",
email: "dude1@example.com<mailto:dude1@example.com>",
lastActive: 1296980700,
level: 57,
timeout: 12969932837
}, 2: {
displayName: "Dude2",
email: "dude2@example.com<mailto:dude2@example.com>",
lastActive: 1296983456,
level: 28,
timeout: 12969937382
}, 3: {
displayName: "Dude3",
email: "dude3@example.com<mailto:dude3@example.com>",
lastActive: 1296980749,
level: 99,
timeout: 129699323459
}
}
最佳答案
Array.prototype.slice.call(arrayLikeObject)
是将类数组对象转换为数组的标准方法。
这只适用于 arguments
对象。将泛型对象转换为数组有点痛苦。这是来自 underscore.js 的来源:
_.toArray = function(iterable) {
if (!iterable) return [];
if (iterable.toArray) return iterable.toArray();
if (_.isArray(iterable)) return iterable;
if (_.isArguments(iterable)) return slice.call(iterable);
return _.values(iterable);
};
_.values = function(obj) {
return _.map(obj, _.identity);
};
事实证明,您需要自己循环对象并将其映射到数组。
var newArray = []
for (var key in object) {
newArray.push(key);
}
您混淆了数组和“关联数组”的概念。在 JavaScript 中,对象有点像关联数组,因为您可以访问 object["key"]
格式的数据。它们不是真正的关联数组,因为对象是无序列表。
对象和数组有很大的不同。
下划线使用示例:
var sortedObject = _.sortBy(object, function(val, key, object) {
// return an number to index it by. then it is sorted from smallest to largest number
return val;
});
关于javascript - 如何对 Javascript 对象进行排序,或将其转换为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4929924/