javascript - 如何合并/组合两个数组并以角度创建一个新行
问题描述
data1 = [{
row: 1,
name: 'edward'
}];
data2 = [{
row: 1,
style: 'style 1'
},{
row: 2,
style: 'style 2'
},{
row: 3,
style: 'style 3'
}];
我要做的是合并/合并数据并创建一个新行。我尝试使用过滤器,但它不显示数据 row2 和 row3。导致从 data1 它只有 1 行。
这是预期的输出
[{
row: 1, data1: { name: 'edward' }, data2: { style: 'style 1' }
},{
row: 2, data1: { }, data2: { style: 'style 2' }
},{
row: 3, data1: { }, data2: { style: 'style 3' }
}];
然后当有来自 data1 的新数据时,应该添加它。例子:
{ row: 5, name: 'juan' }
它应该是这样的:
[{
row: 1, data1: { name: 'edward' }, data2: { style: 'style 1' }
},{
row: 5, data1: { name: 'juan' }, data2: { }
},{
row: 2, data1: { }, data2: { style: 'style 2' }
},{
row: 3, data1: { }, data2: { style: 'style 3' }
}];
我试过的代码:
const data = this.data1.filter((x: any) => this.data2.map((y: any) => y.row === x.row));
console.log(data)
解决方案
试试这个
data1 = [
{row: 1,name: 'edward'},
{ row: 5,name: 'juan' }
];
data2 = [
{
row: 1,
style: 'style 1'
},{
row: 2,
style: 'style 2'
},{
row: 3,
style: 'style 3'
}];
function mergeData(data1,data2){
hashDataOne = {};
mergedArray = [];
data1.forEach(ele =>{
hashDataOne[ele.row] = ele.name;
});
data2.forEach(ele =>{
if(ele.row in hashDataOne){
mergedArray.push({
row: ele.row,
data2:{style:ele.style},
data1:{name:hashDataOne[ele.row]}
});
delete hashDataOne[ele.row];
} else {
mergedArray.push({
row: ele.row,
data2:{style:ele.style},
data1:{}
});
}
});
for(const row in hashDataOne){
mergedArray.push({
row: row,
data2:{},
data1:{name: hashDataOne[row]}
});
}
return mergedArray;
}
console.log(mergeData(data1,data2));
推荐阅读
- rust - 指定常量哈希映射时的 Rust 最佳实践
- swift - 无法输入 uitextfield,因为 - [general] 与守护程序的连接无效
- javascript - 有没有办法使用 $refs 以编程方式触发带有 .native 的 VueJS 元素?
- c - 我正在编写一个 C 程序,但我不知道如何插入“按任意键继续...”并让它在任意键后继续,而不仅仅是输入
- office365 - 我的 Office 365 开发人员帐户处于非活动状态(E5 订阅)
- android - Exoplayer只显示黑屏不播放视频
- javascript - 如何使用 JavaScript 和 canvas arc() 方法更改重叠圆圈的大小?
- arrays - 创建/附加 Numpy 数组
- regex - awk 将数字转换为日期格式以选择大于特定 mmyy 的行
- laravel - 运行 artisan 命令和 npm 命令