我有很多参与者,其中2位也是讲师。我想通过替换一位教师来更新一位教师,并在阵列中保持其余与会者的完整。
这是一个例子:
{
attendees: [
{ email: '[email protected]' },
{ email: '[email protected]' },
{ email: '[email protected]' },
{ email: '[email protected]' },
{ email: '[email protected]' }
]
}
现在,我提交了一组新的教师,其中一位已更改:
{
instructors: [
{ email : '[email protected]' },
{ email : '[email protected]' }
]
}
我的最终结果应该是:
{
attendees: [
{ email: '[email protected]' },
{ email: '[email protected]' },
{ email: '[email protected]' },
{ email: '[email protected]' },
{ email: '[email protected]' }
]
}
[email protected]
代替[email protected]
作为新教师。我想我可以将_.differenceBy与lodash一起使用,但无法弄清楚如何替换数组中已更改的元素。有没有一种优雅的方法可以做到这一点? 最佳答案
以下是一些解决方案,这些解决方案要么1)将更新放入新变量中,要么2)更新参与者变量。当然,这是相当有限的,因为您的数据没有类似于主键的内容(即:ID字段)。如果您有主键,则可以修改这些示例以检查ID。
var attendees = [
{ email: '[email protected]' },
{ email: '[email protected]' },
{ email: '[email protected]' },
{ email: '[email protected]' },
{ email: '[email protected]' }
]
var instructors = [
{ email : '[email protected]' },
{ email : '[email protected]' }
]
// 1) in a new variable
var updatedAttendees = attendees.map(function(item, index) {
return instructors[index] || item;
})
// 2) In the same variable
for (var i = 0; i < attendees.length; i++) {
if (instructors[i]) {
attendees[i] = instructors[i];
}
}
如果您确实有主键,它可能看起来像这样。注意,我们现在有两个嵌套循环。这个例子根本没有优化,只是为了给您一个大致的思路:
var attendeesWithId = [
{ id: 1, email: '[email protected]' },
{ id: 2, email: '[email protected]' },
{ id: 3, email: '[email protected]' },
{ id: 4, email: '[email protected]' },
{ id: 5, email: '[email protected]' }
]
var updates = [
{ id: 4, email: '[email protected]' },
]
for (var j = 0; j < updates.length; j++) {
var update = updates[j];
for (var i = 0; i < attendeesWithId.length; i++) {
if (update.id === attendeesWithId[i].id) {
attendeesWithId[i] = update;
}
}
}