映射来自两个长度不同的数组的数据并创建另一个数组

时间:2019-01-07 09:23:08

标签: javascript arrays json

我有两个具有两个不同长度的数组。 例如:

var array1 = [{name: 'Yuri', age: 2, gender: 'Male'}, {name: 'Akit', age: 19, gender: 'Male'}, {name: 'Kean', age: 14, gender: 'Female'}, {name: 'Jan', age: 29, gender: 'Male'}, {name: 'Max', age: 25, gender: 'Male'}, {name: 'Suzy', age: 20, gender: 'Female'}];
var array2 = [{name: 'Jan', gender: 'Male', occupation: 'Designer'}, {name: 'Max', gender: 'Male', occupation: 'Developer'}, {name: 'Suzy', gender: 'Female', occupation: 'Tester'}];

array1的长度为5,array2的长度为3。我想在两个数组上运行一个循环并匹配名称。如果名称匹配,那么我想从第二个数组中提取该特定对象。由于它们具有不同的长度,因此循环将在第一个数组长度处中断,而不会到达第二个数组的最后一个元素。我正在运行基于array2长度的for循环。请帮助我。

预期结果: 两个数组的名称应匹配,并按如下所示创建另一个数组

var array3 = [{name: 'Jan',age: 29, gender: 'Male', occupation: 'Designer'},

与其他对象相同”

2 个答案:

答案 0 :(得分:0)

您可以使用Set表示一个数组的名称,然后过滤第二个数组。

var array1 = [{name: 'Yuri', age: 9, gender: 'Male'}, {name: 'Akit', age: 19, gender: 'Male'}, {name: 'Kean', age: 14, gender: 'Female'}, {name: 'Jan', gender: 'Male'}, {name: 'Max', gender: 'Female'}],
    array2 = [{name: 'Jan', age: 9, gender: 'Male'}, {name: 'Max', age: 19, gender: 'Male'}, {name: 'Suzy', age: 14, gender: 'Female'}],
    set2 = new Set(array2.map(({ name }) => name)),
    result = array1.filter(o => set2.has(o.name));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

var arr1 = [{name: 'Jan', age: 19}, {name: 'Suzy', age: 29}, {name: 'Peter', age: 39}, {name: 'Bart', age: 49}, {name: 'John', age: 59}];
var arr2 = [{name:'Kean', job: 'Technician'},{name:'Nick', job:'Mathematics'},{name: 'Jan', job: 'Tester'}, {name: 'Suzy', job:'Developer'}, {name: 'Peter', job: 'Scrum master'}];


result = arr1.map(x=> {
	y = arr2.find(z=> x.name == z.name);
	x.job = y ? y.job : undefined;
	return x;
});