Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.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_Underscore.js - Fatal编程技术网

Javascript 用同一个键组合多个数组

Javascript 用同一个键组合多个数组,javascript,underscore.js,Javascript,Underscore.js,我正在尝试通过一个特定的键属性组合多个数组。例如,我有 arr1 [{ key: 'A', items: [{name: 'a item'}] }, { key: 'B', items: [{name: 'b item'}] }] arr2 [{ key: 'B', items: [{name: 'another b item'}, {name: 'more b items'}, {name: 'even more b items

我正在尝试通过一个特定的
属性组合多个数组。例如,我有

arr1

  [{
    key: 'A',
    items: [{name: 'a item'}]
  }, {
    key: 'B',
    items: [{name: 'b item'}]
  }]
arr2

  [{
    key: 'B',
    items: [{name: 'another b item'}, {name: 'more b items'}, {name: 'even more b items'}]
  }]
如何生成以下arr3

  [{
    key: 'A',
    items: [{name: 'a item'}]
  },
  {
    key: 'B',
    items: [{name: 'b item'}, {name: 'another b item'}, {name: 'more b items'}, {name: 'even more b items'}]
  }]

可以使用如下哈希表:

arr1=[{
键:“A”,
项目:[{name:'a item'}]
}, {
键:“B”,
项目:[{name:'b item'}]
}];
arr2=[{
键:“B”,
项:[{name:'另一个b项'},{name:'更多b项'},{name:'更多b项'}]
}];
console.log(arr1.concat(arr2).reduce((函数(散列)){
返回函数(数组,obj){
如果(!散列[obj.key])
array.push(hash[obj.key]=obj);
其他的
散列[obj.key].items.push(…obj.items);
返回数组;
};    

})({}),[]));可以使用如下哈希表:

arr1=[{
键:“A”,
项目:[{name:'a item'}]
}, {
键:“B”,
项目:[{name:'b item'}]
}];
arr2=[{
键:“B”,
项:[{name:'另一个b项'},{name:'更多b项'},{name:'更多b项'}]
}];
console.log(arr1.concat(arr2).reduce((函数(散列)){
返回函数(数组,obj){
如果(!散列[obj.key])
array.push(hash[obj.key]=obj);
其他的
散列[obj.key].items.push(…obj.items);
返回数组;
};    

})({}),[]));我拥有的代码片段,我已经多次用于类似用途。更改了用例的命名

var output = array.reduce(function(o, cur) {

  // Get the index of the key-value pair.
  var occurs = o.reduce(function(k, item, i) {
    return (item.key === cur.key) ? i : k;
  }, -1);

  // If the name is found,
  if (occurs >= 0) {

    // append the current value to its list of values.
    o[occurs].item = o[occurs].value.concat(cur.items);

  // Otherwise,
  } else {

    // add the current item to o (but make sure the value is an array).
    var obj = {key: cur.key, item: [cur.items]};
    o = o.concat([obj]);
  }

  return o;
}, []);

我有一个片段,我已经用过很多次类似的。更改了用例的命名

var output = array.reduce(function(o, cur) {

  // Get the index of the key-value pair.
  var occurs = o.reduce(function(k, item, i) {
    return (item.key === cur.key) ? i : k;
  }, -1);

  // If the name is found,
  if (occurs >= 0) {

    // append the current value to its list of values.
    o[occurs].item = o[occurs].value.concat(cur.items);

  // Otherwise,
  } else {

    // add the current item to o (but make sure the value is an array).
    var obj = {key: cur.key, item: [cur.items]};
    o = o.concat([obj]);
  }

  return o;
}, []);
var arr1=[{
键:“A”,
项目:[{name:'a item'}]
}, {
键:“B”,
项目:[{name:'b item'}]
}]
var arr2=[{
键:“B”,
项:[{name:'另一个b项'},{name:'更多b项'},{name:'更多b项'}]
}]
var arr3=u.map(u.groupBy(arr1.concat(arr2),'key'),
val=>({
key:val[0]。key,items:u.union.apply(this,val.map(v=>v.items))
})
)
console.log(arr3)
var arr1=[{
键:“A”,
项目:[{name:'a item'}]
}, {
键:“B”,
项目:[{name:'b item'}]
}]
var arr2=[{
键:“B”,
项:[{name:'另一个b项'},{name:'更多b项'},{name:'更多b项'}]
}]
var arr3=u.map(u.groupBy(arr1.concat(arr2),'key'),
val=>({
key:val[0]。key,items:u.union.apply(this,val.map(v=>v.items))
})
)
console.log(arr3)

可以查看数组。findIndex…可以查看数组。findIndex。。。