2016-09-19 4 views
-4

Мой массив состоит в следующем:Получение значения свойств объекта

let arr = [ 
    {type: "Benzine", active: false}, 
    {type: "Diesel", active: false}, 
    {type: "Electricity", active: false} 
] 

И у меня есть функция, где я хочу, чтобы получить значение свойства active этого массива:

function isChecked(filterName) { 
    return arr.filter(f => f.type === filterName).map(c => c.active)[0]; 
} 

Это прекрасно работает, с [0] в конце. Есть ли способ показать значение активного свойства без [0] в конце?

ответ

3

Нет, до тех пор, пока вы используете filter, нет.
[0] Используется для получения первого результата с этого фильтра.

Поскольку вы просто возвращается значение active, вы могли бы использовать Array.prototype.some, вместо:

let arr = [ 
 
    {type: "Benzine", active: false}, 
 
    {type: "Diesel", active: false}, 
 
    {type: "Electricity", active: true} 
 
]; 
 

 
function isChecked(filterName){ 
 
    // Is there an element in the array that matches the filter AND is active? 
 
    return arr.some(f => f.type === filterName && f.active); 
 
} 
 

 
console.log("Diesel:", isChecked("Diesel")); 
 
console.log("Electricity:", isChecked("Electricity"));

+0

Несмотря на то, что это хороший пример решения, '' some'' не будет короткое замыкание на первое согласующего элемента, так что в случае «falsy» проверяемого элемент, это будет выглядеть через весь массив. – mdziekon

+0

@mdziekon: Справедливая точка, но, глядя на содержимое массива, я не думаю, что это будет проблемой. Там не так много видов топлива. – Cerbrus

1

Вместо использования filter, вы можете использовать find, чтобы получить первый соответствующий элемент массива.

function isChecked(filterName) { 
    var elem = arr.find(f => f.type === filterName); 
    return elem ? elem.active : false; 
} 
Смежные вопросы