Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中数组的联接字典_Javascript_Arrays_Dictionary - Fatal编程技术网

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]} 我开始做下面的伪代码,但我觉得应该有一种更有效的方

首先,我来自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]}
我开始做下面的伪代码,但我觉得应该有一种更有效的方法

// 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
}, {})