2011-07-20 47 views
0

原來的JSON另一個JavaScript複製問題

var json = 
    [{ "LABEL":"foo1", "DATA":340020, "BAR":235 }, 
    { "LABEL":"foo2", "DATA":140084, "BAR":330 }, 
    { "LABEL":"fooN", "DATA":126489, "BAR":120 }]; 


低於期望的格式,其中新DATA相當於老BAR

[{ "LABEL":"foo1", "DATA":235 }, 
    { "LABEL":"foo2", "DATA":330 }, 
    { "LABEL":"fooN", "DATA":120 }]; 
+0

請儘量準確。 'jBar.DATA'不存在。 – pimvdb

+0

除此之外,'jBar.DATA'屬性從'json.BAR'屬性中獲取它們的值。 –

+0

這是僞代碼 –

回答

3

沒有什麼特別花哨。我會使用一個嵌套的循環:

var index, jBar, obj; 

jBar = []; 
for (index = 0; index < json.length; ++index) { 
    obj = json[index]; 
    jBar[index] = {LABEL: obj.LABEL, DATA: obj.BAR}; 
} 

上述要點:

  • 使用[]創建一個新的空數組分配給jBar
  • 使用老式索引循環(不是for..in,that's not what it's for)循環訪問json陣列。
  • 使用對象文字({...})創建條目以放入jBar
  • 通過分配到下一個可用插槽將它們添加到jBar。你可以使用jBar.push({...});代替,但令人驚訝的,它是慢上幾個平臺,這是非常清楚,所以...
+0

* index *可以用來代替* jBar.length *。在某些瀏覽器中遞減while循環可能會更快:'var i = json.length; while(i--){obj = json [i]; jBar [i] = ...;}' – RobG

+0

@RobG:你一定是在看一箇舊的副本,我幾乎立即改變了它。 :) –

+0

啊是的!所有這些AJAX的東西的問題,網頁並不總是正確更新。 – RobG

0
var i; 
    var json = 
    [{ "LABEL":"foo1", "DATA":340020, "BAR":235 }, 
    { "LABEL":"foo2", "DATA":140084, "BAR":330 }, 
    { "LABEL":"fooN", "DATA":126489, "BAR":120 }]; 

    var jBar = 
    [{ "LABEL":"foo1", "DATA":235 }, 
    { "LABEL":"foo2", "DATA":330 }, 
    { "LABEL":"fooN", "DATA":120 }]; 

    for(var i=0;i<json.length;i++) 
    jBar[i].DATA=json[i].DATA; 

現在jbar具有相同的數據作爲JSON

0

要設置數組屬性爲未定義的值。 JSON.stringify忽略數組的其他屬性

+0

我沒有在設置未定義屬性的問題中看到任何內容,或者在這個問題上使用了'JSON.stringify'。 –

+0

對於這個問題,我沒有在你的問題中看到問題 - 「jBar是json的副本,但它應該如何完成?「 –

+0

@ Andrey:我讀到」如何從'json'中創建看起來像'jBar'的東西?「並且似乎已經正確讀取它。 –