合并两个数组,每个数组包含一些字段 [英] merge two arrays including some fields from each

查看:129
本文介绍了合并两个数组,每个数组包含一些字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用map函数合并两个数组,这个想法是创建一个新数组,其中某些字段取自第一个数组,某些字段取自第二个数组. 条件是名称字段.

I want to merge two arrays using map function, the idea is to create a new array with some fields taken from first array and some fields from the second one. The condition is the field name.

这是列表A:

[
    {"name": "tom", "id": "1", "date": "1654"},
    {"name": "jack", "id": "2", "date": "6544"},
    {"name": "sarah", "id": "3", "date": "987"},
    {"name": "william", "id": "4", "date": "654"},
    {"name": "ronaldo", "id": "5", "date": "12345"}
]

这是列表B:

[
    {"name": "tom", "age": "20", "school": "A", "password": "abcd"},
    {"name": "jack", "age": "25", "school": "B", "password": "1234"}
]

因此,它应该返回合并的版本,但只包括一些选定的字段:

as a result, it should return a merged version, but only some selected fields included:

[
    {"name": "tom", "age": "20", "school": "A", "exists": true, , "date": "1654"},
    {"name": "jack", "age": "25", "school": "B", "exists": true, "date": "6544"},
    {"name": "sarah", "age": "", "school": "", "exists": false, "date": "987"},
    {"name": "william", "age": "", "school": "", "exists": false, "date": "654"},
    {"name": "ronaldo", "age": "", "school": "", "exists": false, "date": "12345"}
]

这是我尝试使用map合并这两个数组的方法,但不是很成功.有人可以帮我实现这一目标吗?

Here is my attempt to merge these two arrays, using map, but not very successful. Could somebody help me to achieve this?

const alldata = listA.map(u => listB.filter(oo => u.name === oo.name));

推荐答案

您非常亲密.试试这个:

You are very close. Try this:

let arrA = [
    {"name": "tom", "id": "1", "date": "1654"},
    {"name": "jack", "id": "2", "date": "6544"},
    {"name": "sarah", "id": "3", "date": "987"},
    {"name": "william", "id": "4", "date": "654"},
    {"name": "ronaldo", "id": "5", "date": "12345"}
];
	
let arrB = [
    {"name": "tom", "age": "20", "school": "A", "password": "abcd"},
    {"name": "jack", "age": "25", "school": "B", "password": "1234"}
];
	
let result = arrA.map(v => {
    let fr = arrB.filter(f => v.name == f.name ) ;
    let e = fr.length ? true : false;
    fr = fr.length ? fr[0] : {age: "", school: "", password: "" };
	
    //Construct the format you want on the final array
    return  {
        name: v.name, 
        age: fr.age, 
        school: fr.school, 
        exists: e, 
        date: v.date
    }
});
	
console.log( result );

这篇关于合并两个数组,每个数组包含一些字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆