Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
如何在JavaScript中反转JSON?_Javascript_Arrays_Json_Loops - Fatal编程技术网

如何在JavaScript中反转JSON?

如何在JavaScript中反转JSON?,javascript,arrays,json,loops,Javascript,Arrays,Json,Loops,我看了这里,有人问了同样的问题,但“勾选”的正确答案是,如果该项目被删除,IE上的内容会有所不同,这很好。我的问题是,上面的那些项目是存储的,但当我去抓取它们,迭代并返回时,这些项目被反转,创建的位于0索引,而任务位于1。另外,我需要将其作为JSON返回 下面是我的基本JS(value==用户传入的int): 这将返回: outputJSON = {}; for(x in json[value]){ outputJSON[x] = _objectRevival(json[value][x

我看了这里,有人问了同样的问题,但“勾选”的正确答案是,如果该项目被删除,IE上的内容会有所不同,这很好。我的问题是,上面的那些项目是存储的,但当我去抓取它们,迭代并返回时,这些项目被反转,创建的
位于
0
索引,而
任务
位于
1
。另外,我需要将其作为JSON返回

下面是我的基本JS(value==用户传入的int):

这将返回:

outputJSON = {};
for(x in json[value]){
    outputJSON[x] = _objectRevival(json[value][x]);
}
return outputJSON;

对象属性的顺序未定义。不可能按指定顺序强制它们。如果您需要按特定顺序使用它们,则可以使用阵列可靠地构建此结构:

created: Mon Dec 06 2010 15:09:40 GMT-0800 (Pacific Standard Time)
task: "test"
然后您可以像这样迭代您的结构:

var values = [
   [["task", "test"],              ["created", "/Date(1291676980607)/"]],
   [["task", "One More Big Test"], ["created", "/Date(1291677246057)/"]],
   [["task", "New Task"],          ["created", "/Date(1291747764564)/"]]
];
for(变量i=0;i
问题在于javascript对象没有按特定顺序存储其属性。另一个上的数组则可以(因此可以从json[0]、json[1]、json[2]中获得一致性)

如果你的对象总是有“任务”和“创建”,那么你可以按你想要的任何顺序获取它们

for (var i = 0; i < values.length; i++) {
    for (var k = 0; k < values[i]; k++) {
        // values[i][k][0] contains the label (index 0)
        // values[i][k][1] contains the value (index 1)
    }
}

更新: 这应该适用于您现有的代码。 在发送json对象之前:

json[value]["created"]
然后将json发送到服务器。稍后,当您从服务器返回数据时:

var before = [
   {"task":"test","created":"/Date(1291676980607)/"},
   {"task":"One More Big Test","created":"/Date(1291677246057)/"},
   {"task":"New Task","created":"/Date(1291747764564)/"}
];
var order = [];
for (var name in before[0]) {
   order.push(name); // puts "task", then "created" into order (for this example)
}

要对输出强制执行特定的顺序,只需将
for
循环中的
json[value]
替换为对象属性数组,按照您希望的顺序显示它们,在您的例子中是
[“task”,“created”]

这将产生以下输出:

var items = ["bag", "book", "pen", "car"];
items.reverse();

即使您有JSON数组,它也会反转。

如果您需要订单,您必须以不同的方式存储数据,例如,作为两个元素数组的数组或键/值对对象的数组。@Matti Virkkunen:我在这里解决了一点不同的问题以节省内存。OP没有确切说明他是否预先知道所有属性,或者无论数据的顺序如何,顺序是否应该跟随数据。是的,我希望,但他们不会。这只是一个演示用例。它们可以存储任何东西。好的,那么在你存储对象之前,你能把它们的名字放入一个数组中,以保持原来的顺序吗?然后当你取回它时,根据数组的顺序读出它们(迭代数组,得到json[value][array[i]])。
\u objectrevolution()
使得如果存储的数据是
对象,例如,如果用户放入
Date()
对象,它会将其转换为.getTime(),然后放入
/Date(12345…/
\u objectrevolution()
使其返回到
日期()
或其他对象,或者,如果它不匹配预定义的对象,则返回我返回的对象。
var before = [
   {"task":"test","created":"/Date(1291676980607)/"},
   {"task":"One More Big Test","created":"/Date(1291677246057)/"},
   {"task":"New Task","created":"/Date(1291747764564)/"}
];
var order = [];
for (var name in before[0]) {
   order.push(name); // puts "task", then "created" into order (for this example)
}
var outputJSON = {};
for (var x in order) {
   if (order.hasOwnProperty(x)) {
      outputJSON[order[x]] = _objectRevival(json[value][order[x]]); // I'm not sure what _objectRevival is...do you need it?
   }
}
return outputJSON;
var items = ["bag", "book", "pen", "car"];
items.reverse();
car , pen, book, bag