JavaScript中数组的联接字典
首先,我来自Obj-C和Python,所以可以随意编辑JavaScript术语中的任何错误 我正在寻找一种在JavaScript中连接多个字典的有效方法,其中每个键可以存在于多个字典中,并且其值是数组 例如,我有:JavaScript中数组的联接字典,javascript,arrays,dictionary,Javascript,Arrays,Dictionary,首先,我来自Obj-C和Python,所以可以随意编辑JavaScript术语中的任何错误 我正在寻找一种在JavaScript中连接多个字典的有效方法,其中每个键可以存在于多个字典中,并且其值是数组 例如,我有: {foo: [1,2], bar: [3,4]} {foo: [5,6], baz: [7,8]} 我想连接同一个键的所有值,这意味着我应该返回: {foo: [1,2,5,6], bar: [3,4], baz: [7,8]} 我开始做下面的伪代码,但我觉得应该有一种更有效的方
{foo: [1,2], bar: [3,4]}
{foo: [5,6], baz: [7,8]}
我想连接同一个键的所有值,这意味着我应该返回:
{foo: [1,2,5,6], bar: [3,4], baz: [7,8]}
我开始做下面的伪代码,但我觉得应该有一种更有效的方法
// Pseudo code
return_value = {}
for (subset in full_array)
for (kv in subset)
data = return_value[kv] || []
data.push(subset[kv])
return_value[kv] = data
此代码适用于:
var joinManyObjects = function joinManyObjects (arrayA, arrayB)
{
var i, j;
for(i = 0; i < arrayB.length; i++)
{
for(j = 0; j < arrayA.length; j++)
{
var k = Object.keys(arrayB[i]);
console.log("Common keys: "+k);
if(k in arrayA[j])
{
arrayA[j][k] = arrayA[j][k].concat(arrayB[i][k]);
}
}
}
}
var a = [{foo: [1,2], bar: [3,4]}];
var b = [{foo: [5,6]}];
joinManyObjects(a,b) -> a = [{"foo":[1,2,5,6],"bar":[3,4]}]
var joinManyObjects=函数joinManyObjects(arrayA,arrayB)
{
varⅠ,j;
对于(i=0;ia=[{“foo”:[1,2,5,6],“bar”:[3,4]}]
您可以添加或类型检测(typeof或Array.isArray)。使用:
看看这个。它应该如何处理重复的值?这就是我的方法。我认为这是一个错误。如果有字典数组,结果是否应该是[{foo:[1,2,5,6],bar:[3,4]},{foo:[5,6]}]?您既可以加入数组,也可以加入字典。@Johan it应该简单地将一个值附加到另一个值,使其成为一个数组。在术语说明中,在JavaScript中,这些被称为对象,而不是字典(这有助于了解您将来是否向熟悉JavaScript的人询问此问题)。而且,该代码看起来根本不像javascript。for循环缺少
{…}
存储模块,将导致错误。这真的是咖啡脚本吗?谢谢。结果就是这么做了,但没有一点进展。减少步骤正是我想要的。
var data = [
{foo: [1,2], bar: [3,4]},
{foo: [5,6]},
];
_.reduce(data, function (result, obj) {
_.each(obj, function (array, key) {
result[key] = (result[key] || []).concat(array)
})
return result
}, {})