2016-03-31 63 views
1

當使用jQuery的窗體上的serializeArray()我得到一個數組,看起來像這樣:轉換2名/值對象的數組鍵一個名稱/值

[{ 
    "name": "name", 
    "value": "1_filename.jpg" 
}, { 
    "name": "caption", 
    "value": "1_caption" 
}, { 
    "name": "name", 
    "value": "2_filename.jpg" 
}, { 
    "name": "caption", 
    "value": "2_caption" 
}, { 
    "name": "name", 
    "value": "3_filename.jpg" 
}, { 
    "name": "caption", 
    "value": "3_caption" 
}, { 
    "name": "name", 
    "value": "4_filename.jpg" 
}, { 
    "name": "caption", 
    "value": "4_caption" 
}] 

但我的代碼的其餘部分預計的東西更多這樣的:

[{ 
    "name": "1_filename.jpg", 
    "caption": "1_caption" 
}, { 
    "name": "2_filename.jpg", 
    "caption": "2_caption" 
}, { 
    "name": "3_filename.jpg", 
    "caption": "3_caption" 
}, { 
    "name": "4_filename.jpg", 
    "caption": "4_caption" 
}] 

我是新來操縱數組和對象這樣的,我不知道是否已經有是所使用的第一個轉換爲類似第二個例子東西的約定。

我的第一個猜測是迭代2並將它們推送到一個新的對象。我試着迭代一個並檢查名字,但我遇到了一些麻煩,確保名稱和標題保持正確。

var output = []; 
for (var i = 0; i < input.length; i += 2) { 
    output.push({ name: input[i].value, caption: input[i + 1].value }); 
} 

Working example

這顯然是僵硬的附帶條件的假設,對象的順序將nameN:

+0

怎麼看起來像之前的原始數據你調用'serializeArray()'? –

回答

1

你可以用一個環路遍歷數組的所有其他元素實現這一目標,captionN,nameN + 1,captionN + 1 ...

如果這種假設不正確,您需要實現自己的sort()邏輯,在創建新的陣列之前將輸入數據置於正確的格式年。

+0

感謝您的支持!最後,我發現這個版本更容易閱讀。 – Dustin

1

環路由兩個,建立一個對象,設置名稱和值到obj的兩個指標,並推對象到數組

var arr = [{ 
 
    "name": "name", 
 
    "value": "1_filename.jpg" 
 
}, { 
 
    "name": "caption", 
 
    "value": "1_caption" 
 
}, { 
 
    "name": "name", 
 
    "value": "2_filename.jpg" 
 
}, { 
 
    "name": "caption", 
 
    "value": "2_caption" 
 
}, { 
 
    "name": "name", 
 
    "value": "3_filename.jpg" 
 
}, { 
 
    "name": "caption", 
 
    "value": "3_caption" 
 
}, { 
 
    "name": "name", 
 
    "value": "4_filename.jpg" 
 
}, { 
 
    "name": "caption", 
 
    "value": "4_caption" 
 
}]; 
 

 
var out = []; 
 
for(var i=0; i<arr.length; i+=2){ 
 
    var obj = {}; 
 
    obj[arr[i].name] = arr[i].value; 
 
    obj[arr[i+1].name] = arr[i+1].value; 
 
    out.push(obj); 
 
} 
 
console.log(out);

相關問題