2017-02-21 2 views
-2

Я пытаюсь фильтровать некоторые объекты в массиве. Но когда я это делаю, я просто получаю пустой массив.Почему массив пуст после фильтрации?

Код:

let guilds = guildsData.filter((el) => { 
    return el.owner == 'true'; 
}); 
console.log(guilds); 

Массив:

[ 
    { owner: false, 
    permissions: 2146958463, 
    icon: 'e568d2b87e31358588cb982354628d51', 
    id: '267920024570691586', 
    name: 'Hydra' }, 
    { owner: true, 
    permissions: 2146958463, 
    icon: null, 
    id: '269159705794838529', 
    name: 'test 2' } ] 

(я удалил большинство объектов, но все они выглядят как это)

+3

потому что '' true '! = True' –

+0

Это похоже на правдивую/фальшивую проблему, каков ожидаемый тип el.owner? если вы снова сравниваете строковое значение 'true', тогда вам нужно использовать' el.owner === 'true'', который будет сравнивать как значение, так и тип 'el.owner'. Если el.owner является логическим, то вы можете просто фильтровать с помощью 'let guilds = guildsData.filter (x => x.owner);' –

ответ

5

Строка 'true' не то же самое, boolean constant true.

Когда одна сторона == является логической, а другая - чем-то еще, сравнение выполняется после преобразования этого булева в число. Таким образом

'true' == true 

осуществляется в

'true' == 1 
+0

@Kinduser. Я действительно не понимаю, что вы имеете в виду, и я не вижу, что этот вопрос связан с этим. – Pointy

+0

Спасибо, теперь я чувствую себя глупо – Celsiuss

1

Попробуйте это:

let guilds = guildsData.filter((el) => { 
    return el.owner; 
}); 

нет необходимости сравнивать true к 'true' (они не одинаковы в любом случае).

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