代码之家  ›  专栏  ›  技术社区  ›  Mark

反向json javascript

  •  5
  • Mark  · 技术社区  · 14 年前

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

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

    所以我得到:

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

    reverse()似乎不适用于json对象。我能想到的唯一方法是遍历所有元素并创建一个数组。感觉应该有更好的办法。

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

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

    我要做的是:

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

    我不想在最后三对上运行foo,也就是说我只想使用最后三对。我想如果我能把它们倒过来,我就可以跑前三个然后停下来。

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

    谢谢。

    编辑2: 我基本上决定最后在服务器端进行操作。我正在重新组织我的数据库,以便相关的子文档现在都是可以用mongodb查询的文档。谢谢。

    4 回复  |  直到 14 年前
        1
  •  8
  •   Adam Lassek    14 年前

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

    Mozilla开发人员网络 :

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

    所以如果你想模拟 跨浏览器中的关联数组 环境,你不得不 使用两个单独的数组(一个用于 键和值的另一个键),或 构建单个属性的数组 物体等。

        2
  •  3
  •   Rasheed    11 年前

    在json对象数组上使用这个

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

    希望这有帮助

        3
  •  1
  •   zoli    14 年前

    这可能会有帮助。将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]
    }); 
    
        4
  •  1
  •   Calete    12 年前

    按照相反的顺序跟随json,

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