合并两个匹配一个id的数组
Merge two arrays matching an id
我有两个数组,例如
var members = [{docId: "1234", userId: 222}, {docId: "1235", userId: 333}];
var memberInfo = [{id: 222, name: "test1"}, {id: 333, name: "test2"}];
我需要将其合并到以编程方式匹配用户 ID 的单个数组中
最终数组应该像
var finalArray = [{docId: "1234", userId: 222, name: "test1"}, {docId: "1235", userId: 333, name: "test2"}]
有没有更干净的方法来做到这一点,我的应用程序中有下划线库,但我找不到一个干净的方法来实现这个
function computeMembers(members, memberInfo) {
return members.map(function(member) {
member.name = memberInfo[getMemberById(member.userId, memberInfo)].name
return member
})
function getMemberById(id, elements) {
var index = elements.filter(function(element) {
return element.id === id
})[0]
return elements.indexOf(index)
}
}
console.log(computeMembers(members, memberInfo))
您可以使用foreach function
并创建第三个数组并显示它来实现。
$scope.members = [{docId: "1234", userId: 222}, {docId: "1235", userId: 333}];
$scope.memberInfo = [{id: 222, name: "test1"}, {id: 333, name: "test2"}];
$scope.finalArray = [];
angular.forEach($scope.members, function(member) {
angular.forEach($scope.memberInfo, function(memberInfo) {
if(member.userId ==memberInfo.id) {
var test = {
docId : member.docId,
userId: member.userId,
name: memberInfo.name
}
$scope.finalArray.push(test);
}
});
});
这是工作中的 plunker:
http://embed.plnkr.co/QRB5v2cI6SZOdZgdqDVR/preview
希望对您有所帮助!
var members = [{
docId: "1234",
userId: 222
}, {
docId: "1235",
userId: 333
}];
var memberInfo = [{
id: 222,
name: "test1"
}, {
id: 333,
name: "test2"
}];
var finalArray = [];
_.each(memberInfo, function (item) {
finalArray.push(_.each(_.where(members, {
userId: item.id
}),
function (element) {
element.name = item.name
}));
});
console.log(finalArray);
使用下划线的解决方案:
var finalArray = _.map(members, function(member){
return _.extend(member, _.omit(_.findWhere(memberInfo, {id: member.userId}), 'id'));
});
- _.map 全体成员
- 使用_.findWhere
查找匹配的会员信息
- _.omit 来自匹配成员信息的 id key
- _.extend有会员信息的会员
在 ES6 上,您可以在 vanilla javascript 中使用 .find 和 Object.assign(),不需要额外的库。
let finalArray = [];
memberInfo.forEach(member => {
finalArray.push( Object.assign( {}, member,
{ docId: members.find(m => m.userId === member.id).docId }
))
});
做一个嵌套映射并用数组中的字段匹配的附加字段 date
更新顶级元素。
member.map(mem => {
return memberInfo.map(info => {
if (info.id === mem.userId) {
mem.date = info.date;
return mem;
}
}
}
我有两个数组,例如
var members = [{docId: "1234", userId: 222}, {docId: "1235", userId: 333}];
var memberInfo = [{id: 222, name: "test1"}, {id: 333, name: "test2"}];
我需要将其合并到以编程方式匹配用户 ID 的单个数组中
最终数组应该像
var finalArray = [{docId: "1234", userId: 222, name: "test1"}, {docId: "1235", userId: 333, name: "test2"}]
有没有更干净的方法来做到这一点,我的应用程序中有下划线库,但我找不到一个干净的方法来实现这个
function computeMembers(members, memberInfo) {
return members.map(function(member) {
member.name = memberInfo[getMemberById(member.userId, memberInfo)].name
return member
})
function getMemberById(id, elements) {
var index = elements.filter(function(element) {
return element.id === id
})[0]
return elements.indexOf(index)
}
}
console.log(computeMembers(members, memberInfo))
您可以使用foreach function
并创建第三个数组并显示它来实现。
$scope.members = [{docId: "1234", userId: 222}, {docId: "1235", userId: 333}];
$scope.memberInfo = [{id: 222, name: "test1"}, {id: 333, name: "test2"}];
$scope.finalArray = [];
angular.forEach($scope.members, function(member) {
angular.forEach($scope.memberInfo, function(memberInfo) {
if(member.userId ==memberInfo.id) {
var test = {
docId : member.docId,
userId: member.userId,
name: memberInfo.name
}
$scope.finalArray.push(test);
}
});
});
这是工作中的 plunker:
http://embed.plnkr.co/QRB5v2cI6SZOdZgdqDVR/preview
希望对您有所帮助!
var members = [{
docId: "1234",
userId: 222
}, {
docId: "1235",
userId: 333
}];
var memberInfo = [{
id: 222,
name: "test1"
}, {
id: 333,
name: "test2"
}];
var finalArray = [];
_.each(memberInfo, function (item) {
finalArray.push(_.each(_.where(members, {
userId: item.id
}),
function (element) {
element.name = item.name
}));
});
console.log(finalArray);
使用下划线的解决方案:
var finalArray = _.map(members, function(member){
return _.extend(member, _.omit(_.findWhere(memberInfo, {id: member.userId}), 'id'));
});
- _.map 全体成员
- 使用_.findWhere 查找匹配的会员信息
- _.omit 来自匹配成员信息的 id key
- _.extend有会员信息的会员
在 ES6 上,您可以在 vanilla javascript 中使用 .find 和 Object.assign(),不需要额外的库。
let finalArray = [];
memberInfo.forEach(member => {
finalArray.push( Object.assign( {}, member,
{ docId: members.find(m => m.userId === member.id).docId }
))
});
做一个嵌套映射并用数组中的字段匹配的附加字段 date
更新顶级元素。
member.map(mem => {
return memberInfo.map(info => {
if (info.id === mem.userId) {
mem.date = info.date;
return mem;
}
}
}