Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
反向json javascript_Javascript_Jquery_Json_Reverse - Fatal编程技术网

反向json javascript

反向json javascript,javascript,jquery,json,reverse,Javascript,Jquery,Json,Reverse,有没有一种便宜的方法可以逆转: { "10": "..." "11": "...", "12": "...", "13": "...", "14": "...", } 因此,我得到: { "14": "...", "13": "...", "12": "..." "11": "...", "10": "...", } reverse()似乎不适用于json对象。我能想到的唯一方法是循环所有元素并创建一个数组。感觉

有没有一种便宜的方法可以逆转:

{
    "10": "..."
    "11": "...",
    "12": "...",
    "13": "...",
    "14": "...",
}
因此,我得到:

{
    "14": "...",
    "13": "...",
    "12": "..."
    "11": "...",
    "10": "...",
}
reverse()似乎不适用于json对象。我能想到的唯一方法是循环所有元素并创建一个数组。感觉应该有更好的方法

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

如果每个键都有按时间顺序排列的数据呢。当我在对象上使用$。时,它从上到下贯穿对象,我没有意识到这是不可靠的

以下是我想做的:

$.each(object, function (key, value) {
  function foo (key, value);
});
我不想在最后3对上运行foo,也就是说,我只想使用最后3对。我想如果我能逆转它们,我就可以运行前三个并停止

我有没有办法只做最后三个?如果最后3个订单不可靠,是否有更安全的方法获取最后3个订单。最后3个将具有最大的数字键

谢谢

编辑2:
我最终决定在服务器端进行操作。我正在重新组织我的数据库,这样相关的子文档现在就充满了可以用mongodb查询的文档。谢谢。

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

来自Mozilla开发者网络

尽管ECMAScript进行迭代 对象顺序 它可能依赖于实现 似乎所有主流浏览器都支持 基于 最早添加的属性优先 (至少对于不在 原型)。然而,在 使用Internet Explorer时 删除一个属性,有些混乱 行为结果,防止其他 浏览器避免使用简单对象 像对象文字一样有序 关联数组。在Explorer中 属性值确实设置为 未定义,如果稍后添加一个 具有相同名称的属性 属性将在其旧 位置--不在 正如人们所期望的那样,迭代序列 在删除属性和 然后又加了回去

所以如果你想模拟一个有序的 跨浏览器中的关联数组 环境,您必须 使用两个单独的阵列(一个用于 键和其他值),或 构建单个属性的数组 物体等


这可能会有帮助。将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]
}); 

按照相反的顺序跟随json

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

在json对象数组上使用此选项

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

希望这能有所帮助

我真的很想知道你这么做想要实现什么。大多数有JSON解析器的语言都不关心对的顺序。@Mark reverse()是一个数组方法,您可以得到对象。另外,您想创建“另一个数组”,但得到的不是数组,而是普通对象。@Mark我认为这两个代码段将创建具有相同特征的对象。一旦计算了对象文字,有关文字中属性顺序的信息就会丢失。@Šime Vidas thank我更新了问题@Ignacio Vazquez Abrams thank you。JSON对象中的顺序永远无法保证。我不明白你为什么想要这个。无论属性的顺序如何,您仍将以相同的方式访问元素。按他们的
名称。@Ignacio这不是PHP问题。@Ignacio他说的是JavaScript对象。这是因为JavaScript“关联数组”实际上是具有属性的对象,而不是实际的数组。问题只存在于IE上吗?很酷。很高兴知道这一点,因为我并没有真的和客户进行任何这样的交流。这句话已经不完全正确了。Chrome和Opera(10.50版)的顺序属性的名称都是无符号32位整数,排在所有其他名称之前(然后以插入顺序显示)。