javascript - 如何对 Javascript 对象进行排序,或将其转换为数组?

标签 javascript arrays json sorting object

我有一些从服务器获取的 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;
});

live example

关于javascript - 如何对 Javascript 对象进行排序,或将其转换为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4929924/

相关文章:

python - 使用 PyQT 在 Python 中将二维整数数组重写为位图

javascript - 解析数组的困难

javascript - 下拉列表中的 Json 解析器错误

javascript - 如何从 JavaScript 对象中删除键?

javascript - 动态验证 HTML

arrays - 以字段名作为参数的 VBA 数组排序

json - json 内容类型开头的奇怪字符

json - 发布到 Microsoft Teams 连接器 Webhook 时,消息可以持续多长时间?

javascript - WordPress插件tinymce冲突

javascript - 在轮播中调整图像大小