2012-11-06 197 views
0

我有這樣的JSON在JSON與元素在Javascript數組

[{"id":7,"serial":"7bc530","randomDouble":0.0,"randomDouble2":0.0,"randomDouble3":0.0,"date":1352228474000,"removed":null}, 
{"id":8,"serial":"4a18d27","randomDouble":0.0,"randomDouble2":0.0,"randomDouble3":0.0,"date":1352228474000,"removed":null}, 
{"id":9,"serial":"f30ef","randomDouble":0.0,"randomDouble2":0.0,"randomDouble3":0.0,"date":1352228474000,"removed":null}, 
{"id":10,"serial":"9e6d","randomDouble":0.0,"randomDouble2":0.0,"randomDouble3":0.0,"date":1352228474000,"removed":null}, 
{"id":11,"serial":"4d8665a3","randomDouble":0.0,"randomDouble2":0.0,"randomDouble3":0.0,"date":1352228474000,"removed":null}, 
{"id":12,"serial":"4fe1457","randomDouble":0.0,"randomDouble2":0.0,"randomDouble3":0.0,"date":1352228474000,"removed":null}] 

更換濾芯和我有這個JSON

{"computers":[{"id":"7bc530","name":"Dell","description":"Dell"}, 
{"id":"f30ef","name":"HP","description":"HP"}, 
{"id":"9e6d","name":"Compaq","description":"Compaq"}, 
{"id":"4d8665a3","name":"Toshiba","description":"Toshiba"}, 
{"id":"4fe1457","name":"Asus","description":"Asus"}, 
{"id":"4a18d27","name":"Acer","description":"Acer"}]} 

我想更換第一個JSON的「串行」元素與這個「描述」一起。爲什麼我需要它在一個JSON中是因爲我使用的是DataTable,而且我只能傳入一個JSON。

我不知道如何在Javascript/JQuery中做到這一點?

+1

我在快樂1猜測串行ID是2,所以遍歷第一個引用的第二個來填充第一一。 –

+0

都是同一順序的數組? – charlietfl

+0

提示:迭代第一個,並使用序列鍵的值來查找第二個條目中的條目...我將實現留給你,以便不干涉@undefined的問題;-) – awenkhh

回答

1

您可以通過設置小功能做到這一點沒有任何的jQuery:

see the demo fiddle

function replaceSerial (data1, data2) { 
    var descs = {}, computers = data2['computers'], final = data1; 

    for (var i = 0; i < computers.length; i++) { 
     descs[computers[i]['id']] = computers[i]['description']; 
    } 

    for (var i = 0; i < data1.length; i++) { 
     final[i]['serial'] = descs[data1[i]['serial']]; 
    } 

    return final; 
} 

然後,只需保存你的JSON的兩首變量和調用函數:

var json1, json2, mergedJson; 

json1 = // DATA IN FIRST JSON; 
json2 = // DATA IN SECOND JSON; 

mergedJson = replaceSerial (json1, json2); 
+0

如果我的「data1」json沒有名字,該怎麼辦?第二個名稱是「computers」,但第一個沒有。 – envinyater

+0

我不確定我瞭解你的問題。你能更具體一些,還是舉個例子?您可以通過將它分配給一個變量來爲您的json分配一個「名稱」。 JSON是本質上有效的javascript。你發佈的第一條JSON是一個數組'''',你發佈的第二條是一個對象'{}'。 –

+0

我能夠得到這個工作,謝謝:) – envinyater

0

假設你的第一個對象被稱爲to和第二對象被稱爲from

// Iterate over each entry in to 
to.forEach(function(value) { 
    // In each iteration find elements in from where the id is the same 
    // as the serial of the current value of to 
    var description = from.computers.filter(function(element){ 
     if (element.id == value.serial) return true; 
    }); 
    // Copy description of first found object in the description property of 
    // the current object 
    value.description = description[0].description; 
    // Unset serial? 
    delete value.serial; 
}); 

DEMO

+0

應該注意''forEach'不適用於所有瀏覽器,如IE <9 – charlietfl

+0

而且在一些瀏覽器中沒有JavaScript這樣的as lynx;) – clentfort