Доброго времени суток.
Появилась необходимость в создании функции на JS, которая:
- на входе получает: два массива (1-й оригинал, 2-й изменённый)
- на выходе: порядковый номер отличного элемента и вид разности
- массивы на входе в свою очередь состоят из массива с двумя элементами
- виды разности:
1. добавлен 1 элемент (всегда в конец массива)
2. удалён 1 элемент
3. изменён 1 элемент
Что имеется:
function func(a,b){
// Если старый массив короче значит добавлен 1 элемент в конец массива
if (b.length > a.length) {
return {num: b.length - 1, type: 'add'};
}
// Если старый массив длинее значит удалён 1 элемент
else if (b.length < a.length) {
for (let i = 0; i < a.length; i++) {
if (a[i][0] != b[i][0] || a[i][1] != b[i][1]) {
return {num: i, type: 'delete'};
}
}
// Иначе был изменён элемент
} else {
for (let i = 0; i < a.length; i++) {
if (a[i][0] != b[i][0] || a[i][1] != b[i][1]) {
return {num: i, type: 'change'};
}
}
}
}
Может кто-нибудь знает более оптимальный алгоритм?
Буду премного признателен.
JsFiddle: