假设我们有 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 个事件要循环,那么性能如何
谢谢
最佳答案
一种简单的方法是循环更新数组 (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);
就性能而言,还有许多其他因素未知。例如,如果这是经常发生的运行时操作,但底层数据相当静态,那么为什么不创建结果并将其存储在数据存储中?
关于javascript - 在 JavaScript 中用另一个数组对象的数据替换数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50011612/