mergeObj return new obj to avoid side effects