反转JSON JavaScript

5

有没有一种廉价的方法来逆转:

{
    "10": "..."
    "11": "...",
    "12": "...",
    "13": "...",
    "14": "...",
}

这样我就可以得到:

{
    "14": "...",
    "13": "...",
    "12": "..."
    "11": "...",
    "10": "...",
}

reverse()在json对象上似乎无法工作。我能想到的唯一方法是遍历所有元素并创建一个数组。感觉应该有更好的方法。

编辑:感谢所有帮助 更新:

如果每个键都有时间顺序数据怎么办?当我在对象上使用$.each时,它从上到下运行对象,我没有意识到这是不可靠的。

这是我想做的事情:

$.each(object, function (key, value) {
  function foo (key, value);
});

我希望只在最后三个对中运行foo,也就是说我只想使用最后三个对。我想如果我能将它们反转,我就可以运行前三个并停止。
有没有办法只做最后三个?如果最后三个的顺序不可靠,是否有更安全的方法来获取最后三个。最后三个将具有最大的数字键。
谢谢。
编辑2: 我最终决定在服务器端进行操作。我正在重新组织我的数据库,使相关子文档现在成为可以使用mongodb查询的完整文档。谢谢。

2
我真的必须质疑你试图通过这样做来实现什么。大多数具有JSON解析器的语言都不会关心键值对的顺序。 - Ignacio Vazquez-Abrams
2
@Mark reverse() 是一个数组方法 - 而你拥有的是对象。另外,你想创建“另一个数组”,但你所拥有的不是数组,而是普通对象。 - Šime Vidas
@Šime Vidas 谢谢,我更新了问题。@Ignacio Vazquez-Abrams 也谢谢您。 - Mark
1
JSON对象中的顺序不能保证。我不明白为什么你会想要这个。无论属性的顺序如何,你仍然可以通过它们的“key”名称以相同的方式访问元素。 - Alex
@Alex,我更新了问题以解释我想做什么。看起来我没有问对问题。 - Mark
显示剩余10条评论
4个回答

8

Javascript关联数组是无序的。您不能依赖于属性以任何特定顺序出现。

来自Mozilla开发者网络

尽管ECMAScript使对象的迭代顺序取决于实现,但似乎所有主要浏览器都支持基于最早添加的属性的迭代顺序(至少对于不在原型上的属性)。但是,在Internet Explorer的情况下,当一个属性使用delete时,会导致一些令人困惑的行为,阻止其他浏览器使用简单对象(如对象字面量)作为有序关联数组。在Explorer中,虽然属性值确实设置为未定义,但如果稍后再添加具有相同名称的属性,则该属性将在其旧位置上进行迭代--而不是在删除属性并重新添加它后所期望的迭代序列的末尾。

因此,如果您想在跨浏览器环境中模拟有序的关联数组,则被迫使用两个单独的数组(一个用于键,另一个用于值),或者构建一个由单属性对象组成的数组等。


4
@Ignacio,这不是一个PHP问题。 - Adam Lassek
3
他在谈论 JavaScript 对象。 - Šime Vidas
1
这是因为Javascript的“关联数组”实际上是具有属性的对象,而不是真正的数组。 - Orbling
问题只出现在IE浏览器上吗?非常好。这很有用,因为我并没有真正与客户端进行任何移动。 - Mark
2
那句话不再完全正确。从Chrome和Opera(从10.50开始)开始,名称为无符号32位整数的属性将排在所有其他属性之前(然后按插入顺序出现)。 - gsnedders

3

在JSON对象数组上使用此方法。

jsonObjectArray.reverse();
$.each(jsonObjectArray, function(i, item) {
    //do something with the item
});

希望这能有所帮助。

2
这可能会有所帮助。将所有json对象的键放入一个数组中,您可以对其进行排序。
var a = { 1 : 'x', 3 : 'y', 2 : 'z' };
var keys = []
for (i in a) { keys.push(i); }
keys.sort();

然后,您可以使用reverse()和slice()来仅迭代您需要的键。
$.each(keys, function(idx, key) { 
  // do whatever with a[key]
}); 

1

按照相反的顺序跟随json。

for(json.length;i>=0;i--)
{
    console.log(json.[i]);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接