2010-06-07 18 views
1

是一個關聯數組(由jQuery.serializeArray()返回的那種)這樣的:jQuery的 - 改變元素的列表關聯數組

[ 
{ 'name': 'abc', 'value': 'aaa', '__proto__': [Object] }, 
{ 'name': 'def', 'value': 'bbb', '__proto__': [Object] }, 
{ 'name': 'abc', 'value': 'ccc', '__proto__': [Object] } 
] 

一個如何轉換這一點,無論是使用jQuery的或只是JavaScript,以便的name: [values]關聯數組是這樣的:

{ 
    'abc': ['aaa', 'ccc'], 
    'def': ['bbb'] 
} 

這似乎基本上是這個問題的倒數:Build associative array based on values of another associative array ......但在Javascript(不是PHP)。我無法在Stackoverflow上找到這個問題,但我認爲它會被問到。

謝謝您的閱讀。

布賴恩

回答

3

你只需要遍歷對象,檢查是否對結果存在name,以及存儲或推入的值,例如:

var result = {}; 
$.each(arr, function (index, el) { 
    if (!result[el.name]) { 
    result[el.name] = [el.value]; 
    } else { 
    result[el.name].push(el.value); 
    } 
}); 
//{"abc":["aaa","ccc"], "def":["bbb"]} 
+0

謝謝;那會做。 :)它讓我想起了,因爲它似乎是一個常見的操作,可能會在jQuery中內置某些內容(例如$ .map/merge),或者某些set_default(如Python)以避免if/else。 – 2010-06-07 22:06:16