2013-03-29 69 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); 
}); 
相关问题