2012-11-16 37 views
1

我对Javascript非常陌生,并且想要交换数组中的数组项。例如:Javascript/JSON:交换数组中的项目

{ 
    "data": [ 
     [null, 1353064450], 
     [null, 1353064460], 
     [null, 1353064470], 
     [null, 1353064480], 
     [null, 1353064490] 
     ], 
    "label": "cpu" 
} 

应该变成:

{ 
    "data": [ 
     [1353064450, null], 
     [1353064460, null], 
     [1353064470, null], 
     [1353064480, null], 
     [1353064490, null] 
     ], 
    "label": "cpu" 
} 

我大概有通过数组进行迭代,并创建一个新的阵列?任何指针都会很棒!

+0

您是否尝试过使用phpjs.org,请检查。 http://phpjs.org/functions/array_flip/ – Raja

+0

为什么你需要这个库,当你有一个完美的本地方法来做到这一点。 –

+0

不是。它不是图书馆。这是一个简单的js代码。 – Raja

回答

3

随着现代JS,你可以做obj.data = obj.data.map(([x, y]) => [y, x])

跨浏览器的支持可能不完整,所以您应该使用一个转换器将其转换为ES5,至少在不久的将来。

原来的答复

使用Array.reverse方法:

var obj = { 
    "data": [ 
     [null, 1353064450], 
     [null, 1353064460], 
     [null, 1353064470], 
     [null, 1353064480], 
     [null, 1353064490] 
     ], 
    "label": "cpu" 
}; 
for(var i=0; i< obj.data.length; i++){ 
    obj.data[i].reverse(); 
} 
0

这里有一个有趣的方式,将在现代浏览器的工作(如IE9及更高版本)

response.data.forEach(Function.call.bind([].reverse)); 

或者如果您在需要.call方法的情况下执行此操作,并且其this值绑定到本身在this(如上)上运行的方法,则可以制作可重复使用的.call活页夹。

var callBind = Function.bind.bind(Function.call); 

    // Then use it like this 
response.data.forEach(callBind([].reverse));