Давай подумаем как в эту реализацию можно добавить replace?
я тут слегка отрефакторил
Array.prototype.compare = function(arr) {
var search = arr.slice();
var insert = [];
var remove = [];
for (var i = 0, index; i < this.length; i++) {
index = search.indexOf(this[i]);
if (index < 0) remove.push(i);
else delete search[index];
}
for (var i = 0; i < search.length; i++) {
if (i in search) insert.push(i);
}
return {
remove: remove,
insert: insert
}
}
по уму, взять и посмотреть где в remove и insert есть одинаковые элементы, это ознчает что там происходит удаление и вставка, то есть замена =) но нет, не всегда замены детектируется так, щас поищу я когда тестировал её там было пару случаев когда индексы разные были, если изменения происходили на коцне массива.