JavaScript sincroniza dos matrices (de objetos) / find delta

Tengo dos matrices, antiguas y nuevas, que contienen objetos en cada posición. Cómo sincronizar o encontrar el delta (es decir, qué es nuevo, actualizado y eliminado de la nueva matriz en comparación con la matriz anterior)

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"}
];

Con los datos anteriores, usando id como clave, encontraríamos que el elemento con id = 2 tiene un título actualizado, el elemento con id = 3 se elimina y el elemento con id = 4 es nuevo.

¿Existe una biblioteca por ahí que tenga funciones útiles, o es un caso de bucle y bucle interno, compara cada fila ... e.g?

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    
    }  
}

¿Hace este tipo de comparación tres veces, para encontrar nuevas, actualizadas y eliminadas?

Respuestas a la pregunta(2)

Su respuesta a la pregunta