JSFiddle - React, Tailwind, and code Playground
JavaScript
function compare(objA, objB, path) {
if (!path) path = '';
return Object.keys(objA).reduce(function(arr, prop) {
var subPath = prop + '.' + path;
if (typeof objA[prop] != 'string' && typeof objA[prop] != 'number') {
return arr.concat(compare(objA[prop], objB[prop], subPath));
}
if (objA[prop] === objB[prop]) return arr.concat(subPath);
else return arr;
}, [])
}
// objeto original
var i18n1 = {
// índice único
title: "Titulo qualquer",
// índice com sub-índices
words: {
logout: "Encerrar sessão",
open: "abrir",
close: "fechar"
},
// índice com sub-índices e itens
combo: {
btn_top: "De volta ao topo",
err_conn: {
dberr: "Erro ao conectar a base de dados",
reqerr: "Erro ao requisitar recurso"
}
}
}
// objeto original
var i18n2 = {
// índice único
title: "Titulo qualquer modificado",
// índice com sub-índices
words: {
logout: "Encerrar sessão",
open: "abrir janela",
close: "fechar"
},
// índice com sub-índices e itens
combo: {
btn_top: "De volta ao topo",
err_conn: {
dberr: "Erro ao conectar a base de dados",
reqerr: "Reco reco"
}
}
}
var kept = compare(i18n1, i18n2);
console.log(kept);