2014-02-07 4 views
0

У меня есть массив объектов:Slick функция для фильтрации массива объектов

{Option1: true, Option2: true, Option3: true} 

Я хочу к фильтр этот массив, так что только истинные элементы остаются. Но мне нужен ключ, а не значение. Как я могу это сделать?

Я искал функцию underscore.js, но они делают это только для значений, а не для ключей.

+0

Пронумеруйте массив и сохраните только те ключи, которые содержат '' true ''как значение. – markusthoemmes

+1

Есть функция '.filter()', доступная в собственном прототипе Array. Синтаксис вашего массива недействителен - на что это похоже? – Pointy

+0

Ваш синтаксис недействителен. – plalx

ответ

1
var keys = [{"key1":"false"}, {"key2":"true"}] 
     .filter(function (o, i) { return o['key' + (i + 1)] === 'true'; }) 
     .map(function (o) { for (var k in o) return k; }); 

console.log(keys); //["key2"] 

EDIT:

Вы изменили вопрос ... {Option1: true, Option2: true, Option3: true} не является массивом объектов, это просто объект. Вот что вы могли бы сделать:

var o = {Option1: true, Option2: true, Option3: true}; 

var keys = Object.keys(o).filter(function (k) { 
    return o[k]; 
}); 
1

Во-первых, это не массив объектов.

Это массив объектов:

ax = 
[ {Option1: true, Option2: true, Option3: true}, 
    {Option1: true, Option2: true, Option3: true}, 
    {Option1: true, Option2: true, Option3: true} ] 

Чтобы отфильтровать его перебирать и тест. Если она проходит по вашим критериям, скопируйте его в набор результатов:

result = []; 

for (i = 0; i < ax.length; i++) 
{ 
    if (ax[i].Option2) // may be as complex as you need it to be 
    { 
    // passed test 
    result.push(ax[i]); 
    } 
} 

Теперь result содержит элементы, которые вы хотите.

Смежные вопросы