JavaScript синхронизирует два массива (объектов) / находит дельту

У меня есть два массива, старый и новый, которые содержат объекты в каждой позиции. Как бы я синхронизировал или нашел дельту (то есть, что нового, обновлено и удалено из нового массива по сравнению со старым массивом)

var o = [
    {id:1, title:"title 1", type:"foo"},
    {id:2, title:"title 2", type:"foo"},
    {id:3, title:"title 3", type:"foo"}
];

var n = [
    {id:1, title:"title 1", type:"foo"},
    {id:2, title:"title updated", type:"foo"},
    {id:4, title:"title 4", type:"foo"}
];

Используя приведенные выше данные, используя id в качестве ключа, мы обнаружили бы, что элемент с id = 2 имеет обновленный заголовок, элемент с id = 3 удаляется, а элемент с id = 4 является новым.

Существует ли существующая библиотека с полезными функциями, или это случай цикла и внутреннего цикла, сравните каждую строку ... например.

for(var i=0, l=o.length; i<l; i++)
{   
    for(var x=0, ln=n.length; x<ln; x++)
    {
        //compare when o[i].id == n[x].id    
    }  
}

Делать такое сравнение три раза, чтобы найти новое, обновленное и удаленное?

Ответы на вопрос(2)

Ваш ответ на вопрос