2013-03-29 86 views
1

我有兩個數組,如下所示。取兩個數組並將它們變成鍵 - 值對

idOne = ["6", "6", "11"] 
counts = ["2", "1", "1"] 

我該如何將這做成一個關聯數組,idOne是關鍵和計數是值?

+0

試試這個功能:http://phpjs.org/functions/array_combine/ – jeremy

+2

JavaScript沒有關聯數組。 – undefined

+0

好吧,好吧。我如何使idOne成爲關鍵和計數變量值? – wowzuzz

回答

3

(根據您的意見更新)

var totalsByID = {}; 
for(var i = 0; i < idOne.length; i++) { 
    var id = idOne[i]; 
    var count = parseInt(counts[i]); 
    if(totalsByID[id] === undefined) { 
     // We have no entry for this ID, so create one 
     totalsByID[id] = count; 
    } else { 
     // We already have an entry for this ID, so we need to add our current count to it 
     totalsByID[id] += count; 
    } 
} 

var obj = {}; 
for(var i=0, l=idOne.length; i<l; i++){ 
    obj[idOne[i]] = counts[i]; 
} 

然後,您可以訪問它plalx建議使用包含您的陣列的替代結構進行測試:

var idOne = ["6", "6", "11"], 
    counts = ["2", "1", "1"], 
    totalsById = {}, 
    i = 0, 
    len = idOne.length, 
    k; 

for(; i < len; i++) { 
    k = idOne[i]; 

    //initialize the total to 0 
    totalsById[k] = totalsById[k] || 0; 

    //you could remove the parseInt call if your count values were numbers instead of strings 
    totalsById[k] += parseInt(counts[i], 10); 
} 
+0

我在console.log中獲取此內容 對象{6:「2」,11:「1」} 其他6在哪裏?我認爲這是因爲它不是foreach,而是因爲? – wowzuzz

+2

這就是你應該得到的。您有重複的密鑰,並且根據定義,KEY應該是唯一的。那是你的主要問題。 – elclanrs

+0

elclanrs是正確的,JavaScript不能有兩個同名的「鍵」的對象(否則,當你調用hash [「6」]?時會返回什麼)。如果您告訴我們您要實現的目標,我們可以制定出更好的解決方案。 –

1

你將不得不使用對象來實現:

obj['6']; // -> 1 
+1

但是'obj ['6'] ='1';' – elclanrs

+1

@elclanrs - 哈哈是非常正確的。我沒有看OP的完整例子。只是真的展示了這個概念。 – Aust

1

試試這個:

idOne = ["6", "6", "11"] 
counts = ["2", "1", "1"] 

var dict = []; // create an empty array 
$.each(idOne, function (index, value) { 
    dict.push({ 
     key: idOne[index], 
     value: counts[index] 
    }); 
}); 

console.log(dict); 

您可以訪問鍵值對這樣的:

$.each(dict, function (index, data) { 
    console.log(data.key + " : " + data.value); 
}); 
相關問題