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。。。