Cómo filtrar profundamente los objetos (no las matrices de objetos)

Estoy trabajando con una estructura de datos JS que se parece a esto:

table = {
  row1: {
    col1: 'A',
    col2: 'B',
    col3: 'C'
  },
  row2: {
    col1: 'D',
    col2: 'A',
    col3: 'F'
  },
  row3: {
    col1: 'E',
    col2: 'G',
    col3: 'C'
  }
};

¿Cómo podrían filtrar este objeto utilizando las funciones nativas de filtro / mapa / reducción de JavaScript para producir una matriz de claves de objeto de fila que contienen la propiedad col3 = "C"?

En este caso, devolvería['row1', 'row3'].

Esta es una solución que se me ocurrió originalmente basada en otra respuesta:

Object.keys(Object.keys(table).reduce(function(accumulator, currentValue) {
  if (table[currentValue].col3==='C') accumulator[currentValue] = table[currentValue];
  return accumulator;
}, {}));

Sin embargo, acepté la solución a continuación usandofilter() porque es más eficiente. La respuesta aceptada está en la sintaxis ES6, pero la sintaxis ES5 fue proporcionada por @Paulpro:

Object.keys(table).filter(function(row) {
  return table[row].col3==='C';
});

(Tenga en cuenta que hay soluciones similares, pero utilizan funciones personalizadas y no son tan concisas como la respuesta aceptada que se proporciona a continuación.)

Respuestas a la pregunta(1)

Su respuesta a la pregunta