Como filtrar objetos profundamente (não matrizes de objetos)

Estou trabalhando com uma estrutura de dados JS que se parece com isso:

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

Como vocês filtrariam esse objeto usando as funções nativas de filtro / mapa / redução do JavaScript para produzir uma matriz de chaves de objetos de linha que contenham a propriedade col3 = "C"?

Nesse caso, retornaria['row1', 'row3'].

Esta é uma solução que eu originalmente criei com base emoutra resposta:

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

No entanto, aceitei a solução abaixo usandofilter() porque é mais eficiente. A resposta aceita está na sintaxe ES6, mas a sintaxe ES5 foi fornecida por @Paulpro:

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

(Observe que existemsoluções similares lá fora, mas eles usam funções personalizadas e não são tão concisos quanto a resposta aceita fornecida abaixo.)

questionAnswers(1)

yourAnswerToTheQuestion