假设我们有2个数组:
array1有1个事件:
var array1 = [
{
start: '2018-04-24T10:00:00',
end: '2018-04-24T11:00:00',
title: 'Been to Break'
}
];
array2有3个事件:
var array2 = [
{
start: '2018-04-24T08:00:00',
end: '2018-04-24T10:00:00',
title: 'Lunch'
},
{
start: '2018-04-24T10:00:00',
end: '2018-04-24T11:00:00',
title: 'Break'
},
{
start: '2018-04-24T13:00:00',
end: '2018-04-24T14:00:00',
title: 'Meeting'
}
];
期望的结果应该是一个新的数组:array3
var array3 = [
{ //event 1
start: '2018-04-24T08:00:00',
end: '2018-04-24T10:00:00',
title: 'Lunch'
},
{ //event 2
start: '2018-04-24T10:00:00',
end: '2018-04-24T11:00:00',
title: 'Been to Break'
},
{ //event 3
start: '2018-04-24T13:00:00',
end: '2018-04-24T14:00:00',
title: 'Meeting'
}
];
您可以从array3中的所需结果中看到,array2中的事件2已替换为array1中的事件1,因为起始值和结束值是匹配的。
这可以在JavaScript中完成吗?如果我们让1000个事件循环通过
那么性能呢?由于
答案 0 :(得分:1)
一种简单的方法是循环更新数组(array1)以在array2中找到匹配项并在找到时替换它。
var array1 = [{
start: '2018-04-24T10:00:00',
end: '2018-04-24T11:00:00',
title: 'Been to Break'
}];
var array2 = [{
start: '2018-04-24T08:00:00',
end: '2018-04-24T10:00:00',
title: 'Lunch'
},
{
start: '2018-04-24T10:00:00',
end: '2018-04-24T11:00:00',
title: 'Break'
},
{
start: '2018-04-24T13:00:00',
end: '2018-04-24T14:00:00',
title: 'Meeting'
}
];
array1.forEach((evUpdate) => {
const matchIndex = array2.findIndex((ev) => ev.start === evUpdate.start && ev.end === evUpdate.end);
if (matchIndex > -1) {
array2.splice(matchIndex, 1, evUpdate);
}
});
console.log(array2);

根据表现,还有很多其他因素未知。例如,如果这是经常发生的运行时操作,但底层数据是相当静态的,那么为什么不在数据存储中创建和存储结果呢?