Я работаю со структурой данных JS, которая выглядит примерно так:
table = {
row1: {
col1: 'A',
col2: 'B',
col3: 'C'
},
row2: {
col1: 'D',
col2: 'A',
col3: 'F'
},
row3: {
col1: 'E',
col2: 'G',
col3: 'C'
}
};
Как бы вы, ребята, отфильтровали этот объект, используя встроенные в JavaScript функции filter / map / lower для создания массива объекта строкиключи, которые содержат свойство col3 = "C"?
В этом случае будет возвращено ['row1', 'row3']
.
Это решение, которое я изначально придумал, основано на другомответ :
Object.keys(Object.keys(table).reduce(function(accumulator, currentValue) {
if (table[currentValue].col3==='C') accumulator[currentValue] = table[currentValue];
return accumulator;
}, {}));
Однако я принял решение, приведенное ниже, используя filter()
, потому что оно более эффективно.Принятый ответ в синтаксисе ES6, но синтаксис ES5 был предоставлен @Paulpro:
Object.keys(table).filter(function(row) {
return table[row].col3==='C';
});
(Обратите внимание, что существует похожих решений , но они используют пользовательские функции и некраткий, как принятый ответ, приведенный ниже.)